0

我知道下面的 XML行不通,但是有什么方法可以达到同样的效果吗?

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

解释一下,我想要达到的效果是使子布局的大小是其父布局的 X 倍,其中 X 是浮点数。在 XML 示例中,我使用了 5。

我试图使用它创建的效果是让 ScrollView 的大小为 Y 并且它的内容视图的大小为 Y * X。

4

3 回答 3

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);
        }
    });
于 2012-11-28T20:42:03.897 回答
0

你怎么能让孩子适应较小的父母,即使通过编程也是不可能的。

如果你愿意,首先你的父视图必须具有“wrap_content”属性,如果是,那么你不能做 X*5 的事情。

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

于 2012-11-28T20:37:19.897 回答
0

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

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

但是,您确实冒着混乱的风险,因为如果子视图正在测量父视图,则子视图可以扩展,从而使您有机会扩展父视图(尽管 match_parent 可能会阻止这种情况)。然后你将孩子的大小调整为比父母大,然后你测量父母的大小,它扩大了。所以,你会陷入一个循环,孩子试图比父母大,父母调整大小以适应孩子,孩子进一步扩大。

于 2012-11-28T21:51:49.493 回答