固定屏幕上的布局比例

时间:2012-05-20 11:10:19

标签: android android-layout android-view percentage android-layout-weight

在我的应用中,我有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,但它不会改变任何内容。

4 个答案:

答案 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