Android:如何确定视图的新大小

时间:2017-03-28 22:39:43

标签: android

我有一个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仍然是一样的。

如何计算新高度?

1 个答案:

答案 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();
            }
        }
    });