基于父视图大小的Android大小调整XML视图大小

时间:2012-11-28 20:25:06

标签: android xml layout

我知道以下XML 有效,但有没有办法达到同样的效果?

....
<LinearLayout
    android:layout_width="match_parent * 5"
    android:layout_height="match_parent" />
....

为了解释,我试图实现的效果是使子布局X的大小与其父布局相同,其中X是浮点数。在XML示例中,我使用了5.

我尝试使用此功能创建的效果是让ScrollView为Y尺寸,并使其内容视图的大小为Y * X.

3 个答案:

答案 0 :(得分:1)

据我所知,无法通过XML布局实现这一目标。您可以在活动中添加以下代码,以便更改子视图的高度。请注意,一旦android完成了活动布局,就会知道视图的大小。因此,您可以添加一个侦听器,以了解布局何时准备好以及所有大小都已知。我同意Syed Zahid Ali的说法,你不能让更大的孩子适合较小的父母,但就ScrollView而言,这段代码应该有效:

final ViewGroup parentView = findViewById(R.id.parentView);
    final View childView = parentView.findViewById(R.id.childView);

    parentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            float parentHeight = parentView.getHeight();

            ViewGroup.LayoutParams params = childView.getLayoutParams();
            params.height = (int)(parentHeight * 5);

            childView.setLayoutParams(params);
            //We want the listener to be called only the first time(in case it is initialized in onCreate())  
            parentView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
    });

答案 1 :(得分:0)

如何让孩子适应较小的父母,即使通过编程也是如此。

如果你想这样,首先是你的父视图必须具有“wrap_ content”属性,如果是,则你不能做X * 5的事情。

所以,你所说的是不可能的。

答案 2 :(得分:0)

如果您知道父级大小,您可以在layout_width中为子级指定px / dp / dip / sp值。我实际上会推荐这种方法,因为它更简单,并且你可能不会爆炸。

否则,在父视图调用onDraw()之后,您实际上可以获得以像素为单位的宽度/高度。有人说getWidth和getHeight适用于onWindowFocusChanged调用,我之前成功地用它来测量视图。

你确实冒了一团糟,因为如果一个子视图正在测量父视图,那么子视图可以扩展,从而为你提供父扩展的机会(尽管match_parent可能会阻止这种情况)。然后,您将子项的大小调整为大于父项,然后测量父项的大小,该大小已扩展。所以,你会陷入一个孩子的循环中,试图比父母更大,而父母正在调整大小以适应孩子,孩子会进一步扩展。