我在这里看了很多线程试图理解为什么会这样,但我无法绕过它。
在我的RelativeLayout中,我有4个HorizontalScrollViews(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行太大而不适合菜单上方的空间)。
任何人都可以对此有所了解吗?非常感谢你!
答案 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()值。