按行百分比调整GUI元素大小

时间:2012-08-13 00:38:47

标签: android layout view scaling

我在这里看了很多线程试图理解为什么会这样,但我无法绕过它。

在我的RelativeLayout中,我有4个Horizo​​ntalScrollViews(HSV)位于菜单上方(alignedParentBottom)。

我想在此菜单上方均匀分隔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行太大而不适合菜单上方的空间)。

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

3 个答案:

答案 0 :(得分:2)

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

E.g。当父母有android:layout_weight="25"时,android:weightSum="100"占25%。

答案 1 :(得分:0)

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

它表示视图应该与父减去填充一样大,但是你可能需要在父集中放置另一个“父”来绑定整个集合以包含你调整大小的单独集合。

答案 2 :(得分:0)

我没想到顶部有菜单栏,占据了部分设备屏幕。我的解决方案是使主布局高度为fill_parent,然后获取主布局的高度。我使用此值,而不是display.getHeight()值。