在我的应用中,我有2个线性布局:一个在顶部,一个在底部。
我希望这些布局中的任何内容,顶部的布局占据屏幕高度的60%,底部布局占40%。 这是我的XML代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.6"
android:orientation="vertical"
android:id="@+id/layout_top">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="0.4"
android:id="@+id/layout_bottom">
</LinearLayout>
</LinearLayout>
当这些布局为空时没问题,它们有很好的比例。
问题在于,如果我在顶部布局中放置一个小的列表视图,例如然后布局将采用列表视图的大小,并且不会保留60/40%的比例。
即使我的列表视图很小(例如只有3项),我也会喜欢它,布局保留了60%,所以在我的列表视图下放了一些空白区域。
我尝试将android:layout_height
更改为match_parent
,但它不会改变任何内容。
答案 0 :(得分:6)
尝试使用此布局,它适用于我
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="6"
android:orientation="vertical"
android:id="@+id/layout_top"
android:background="#FF0000">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="vertical"
android:layout_weight="4"
android:id="@+id/layout_bottom"
android:background="#FF00FF">
</LinearLayout>
</LinearLayout>
诀窍是在纵向模式下设置layout_height="0dip"
而不是wrap_content,而在横向模式下设置layout_with="0dip"
而不是wrap_content,你可以使用layout-land文件夹。
答案 1 :(得分:1)
layout_weight在视图的layoutfot中指定额外的空间。您应该首先尝试测量屏幕,如:
Display display = ((WindowManager)
getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getHeight();
然后做一些宽度* 0.6和0.4的计算,这样你的布局总是有60比40。
希望这有助于
答案 2 :(得分:0)
在两个孩子layout_height = 0dp
中尝试LinearLayouts
。它的发生是因为你wrap_content
可能会覆盖layout_weight
效果。
答案 3 :(得分:0)
只需在您的父版面中,将android:layout_weight="1.0"
替换为android:weightSum="1.0"
这可以通过设置父布局的权重总和子布局的权重来实现。孩子的体重应该等于父母的体重总和。看一下这个http://blog.stylingandroid.com/archives/312