0

我在这里查看了很多线程,试图理解为什么会发生这种情况,但我就是无法理解它。

在我的 RelativeLayout 中,我有 4 个 Horizo​​ntalScrollViews (HSV),它们位于菜单(它是对齐的ParentBottom)上方。

我想在此菜单上方均匀分布 4 个 HSV。

根据我的计算,我应该能够获取设备高度,减去菜单高度,然后除以 4,得到单独的 HSV 高度。

但是,当我设置每个 HSV 的高度时,它们都比它们应该的大。

(注意:display.getHeight() 返回正确的尺寸。我在 480x800 设备上,如果我打印 deviceHeight 它返回 800)

这是我的代码:

    RelativeLayout menuLayout = (RelativeLayout)findViewById(R.id.menuLayout);
    HorizontalScrollView row1 = (HorizontalScrollView)findViewById(R.id.row1);
    HorizontalScrollView row2 = (HorizontalScrollView)findViewById(R.id.row2);
    HorizontalScrollView row3 = (HorizontalScrollView)findViewById(R.id.row3);
    HorizontalScrollView row4 = (HorizontalScrollView)findViewById(R.id.row4);

    //get current device dimensions
    Display display = getWindowManager().getDefaultDisplay();
    deviceWidth = display.getWidth(); //returns 480
    deviceHeight = display.getHeight(); //returns 800

    int menuHeight = deviceWidth/5; // 480/5 = 96
    int remainingSpace = deviceHeight - menuHeight; // 800 - 96 = 704
    int rowHeight = (int) (remainingSpace/4); // 704/4 = 176

    menuLayout.getLayoutParams().height = menuHeight;

    row1.getLayoutParams().height = rowHeight;
    row2.getLayoutParams().height = rowHeight;
    row3.getLayoutParams().height = rowHeight;
    row4.getLayoutParams().height = rowHeight;

当我运行这段代码时,每一行都太大了,并被推到底部的菜单下。如果我运行 getHeight()。在一行上,它说它是正确的高度(176),但显然不是(因为 4 行太大而无法放入菜单上方的空间)。

任何人都可以对此有所了解吗?太感谢了!

4

3 回答 3

2

你真的应该在LinearLayout这里使用 a 。您可以使用该android:layout_weight属性来使用百分比。如果事情是偶数,只需使用 1,否则,您可以设置android:weightSum="100"然后在权重中使用整数(以百分比表示)。

例如android:layout_weight="25"25%,当父母有android:weightSum="100".

于 2012-08-13T01:44:14.233 回答
0

ViewGroup.LayoutParams嵌套子类 LayoutParams 的“常量字段值” public static final int FILL_PARENT 常量值:-1 (0xffffffff)

它说视图应该与父级减去填充一样大,但是您可能需要在父级内放置另一个“父级”来限制整个集合以包含您调整大小的单独集合。

于 2012-08-13T01:04:21.643 回答
0

我没有考虑顶部有菜单栏,它占据了设备屏幕的一部分。我的解决方案是让主布局高度为fill_parent,然后得到主布局的高度。我使用这个值,而不是 display.getHeight() 值。

于 2012-08-13T15:32:42.187 回答