Android layout_weight comportment

时间:2011-05-11 18:03:33

标签: android android-layout android-linearlayout

我正在尝试使用layout_weight构建一个Android布局,以适应所有尺寸的设备,我在理解其内容方面遇到了一些麻烦。

我注意到,更改layout_width / layout_height会影响layout_weight内容,但我不明白如何。

比方说,我想要一个垂直LinearLayout分为三个内部LinearLayout,使得顶部的一个和底部的一个填充屏幕的25%,并且在中间50%,这不应该取决于内部布局的内容。 (如果内部LinearLayout的内容太大,则不应移动其他布局)

为了做到这一点,我应该将内部layout_height的{​​{1}}属性设置为LinearLayout还是设置为fill_parent

谢谢!

编辑:看起来layout_weight与布局占用的大小成反比。

3个例子:

重量1/1/1(按预期工作)

wrap_content

结果: enter image description here

重量1/2/1(为什么,为什么?)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
        <LinearLayout
            android:id="@+id/layout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#FF0000"/> //RED
        <LinearLayout
            android:id="@+id/layout2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#00FF00"/> //GREEN
        <LinearLayout
            android:id="@+id/layout3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#0000FF"/> //BLUE
</LinearLayout>

结果: enter image description here

**重量3/2/3(我打算用1/2/1做什么):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
        <LinearLayout
            android:id="@+id/layout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#FF0000"/> //RED
        <LinearLayout
            android:id="@+id/layout2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="2"
            android:background="#00FF00"/> //GREEN
        <LinearLayout
            android:id="@+id/layout3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#0000FF"/> //BLUE
</LinearLayout>

结果:enter image description here

3 个答案:

答案 0 :(得分:3)

您可以尝试设置layout_height = 0dp

答案 1 :(得分:3)

要使layout_weight按预期工作(并记录在案),您必须layout_height设置为fill_parentmatch_parent。< / p>

http://developer.android.com/guide/topics/ui/layout/linear.html#Weight右侧的示例显示了layout_height设置为0dp的示例。但是,根本不进行设置或将其设置为wrap_content也会使layout_weight按预期工作。

答案 2 :(得分:1)

您应该将所有三个内部布局的layout_height设置为“fill_parent”,然后更改它们的权重以使它们看起来像您想要的那样。