我有一个LinearLayout(垂直),里面有两个子视图。第一个是ScrollView,第二个是Visibility.GONE的另一个布局,它的大小不固定(由孩子决定)。
<LinearLayout vertical>
<ScrollView> ... </ScrollView>
<AnotherLayout visibility=GONE height=wrap_content> ... </AnotherLayout>
</LinearLayout>
在某些时候我想展示AnotherLayout。但是,一旦它弹出,我也想调整我的ScollView滚动。为此,我需要知道这个AnotherLayout的大小。
我做了类似的事情:
int oldHeight = scrollArea.getHeight();
linearLayout.setVisibility(VISIBLE);
int newHeight = scrollArea.getHeight();
但是oldHeight和newHeight仍然是一样的。
如何计算新高度?
答案 0 :(得分:0)
两个维度是相同的,因为可见性更改需要花费时间,代码行在此之前运行,因此它返回相同的内容。 您可以使用可见性侦听器在可见性更改后计算维度,您可以使用
linearLayout.setTag(linearLayout.getVisibility());
linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int newVis = linearLayout.getVisibility();
if((int)linearLayout.getTag() != newVis)
{
linearLayout.setTag(linearLayout.getVisibility());
//visibility has changed
int newHeight = scrollArea.getHeight();
}
}
});