Android布局权重


84

我是Android开发的新手,我对在线性布局中设置权重有疑问。

我试图用两个自定义按钮和一个自定义编辑文本创建一行。编辑文本应仅占用其内容所需要的空间,并且两个按钮应水平扩展以填充该行中其余的可用空间。像这样...

| [#Button++#] [#Button--#] [et] |

经过几次尝试,即使看起来过于复杂,这也是我能最接近我想要的东西。

| [Button] [Button] [###ET###] |

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:layout_weight="1"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_plus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_plus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/tv_dice_plus" 
                android:text="@string/tv_plus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_minus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_minus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/btn_minus" 
                android:text="@string/tv_minus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <EditText 
            android:textColor="#FAFAF4"
            android:text="@string/et_output" 
            android:id="@+id/et_output" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true" 
            android:minWidth="50sp"         
            android:maxWidth="50sp"
            android:background="@drawable/tv_black_background3"
            android:textColorHighlight="#c30505"
            ></EditText>
    </LinearLayout>
</LinearLayout>

据我了解,为按住按钮的线性布局设置[android:layout_weight =“ 2”]应该使它们比编辑文本占用更多的空间,但是对我来说却相反,使它们的大小都减小了一半。

| [Btn] [Btn] [#####et#####] |

我尝试了很多不同的组合,甚至都不记得它们了,但都没有奏效。

Answers:


213

它不起作用,因为您使用fill_parent作为宽度。当总和大于LinearLayout时,权重用于分配剩余的空白空间占用空间。将宽度设置为0dip即可


6
将线性布局的宽度设置为0dip就像我想要的那样工作。我不知道那是一个选择。为什么在wrap_content不起作用的地方起作用,这是有道理的。如果没有内容,则将宽度设置为wrap_content会使它消失,但是将其设置为0dip则可以使其从无到有扩展到需要的大小。非常感谢你。
UnluckyDevil

也可以将layout_width设置为“ fill_parent”,并将layout_weight设置为浮点值,例如“ 0.2”,“ 0.85”等。在这种情况下,数字越大,视图的尺寸就越小。您能否解释一下这是否可以接受?
Yar

37
这也为我工作。谢谢。(尽管我不得不说,还有其他人会发现android布局系统很奇怪
又不

谢谢!我真的很难告诉我为什么布局宽度没有按预期显示。它是通过0dip设置完成的:)
marlar 2011年

如果您想做简单的事情,@ tstyle android很简单。但是,如果您想做的事情不只是简单的事情,那就太难了。
Pacerier

14

android:Layout_weight当您未将固定值附加到宽度fill_parent等上时可以使用。

做这样的事情:

<Button>

Android:layout_width="0dp"
Android:layout_weight=1

-----other parameters
</Button>

7

这样想,会更简单

如果您有3个按钮,其权重分别为1,3,1,则其工作方式类似于HTML中的表格

为该行提供5部分:1部分用于按钮1,3部分用于按钮2,1部分用于按钮1


3

在linearLayout中设置WeightSum = 2;

并将权重分配给您希望显示的子项。.我已给子项分配了权重=“ 1”。因此,两者将分配总数的一半。

 <LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/maila_oss" />
</LinearLayout>

2

权重值0-1与权重值成比例地共享可用空间的分布(在设置layout_width =“ 0px”之后)。未指定权重的视图元素(无权重输入)的权重为0,这意味着它们不会扩展。

一个无需权重条目的简单替代方法是将选框附加到带有文本的视图,该视图告诉其将文本(wrap_content)所需的最小值扩展到可用空间EditText:android:layout_width =“ wrap_content” android:ellipsize =“ marquee”


0

我想将EditTexts的宽度设置为wrap_content并将两个按钮放入LinearLayout其宽度为fill_parent,权重设置为1的按钮。


0

我发现的另一个原因(听起来可能有些含糊)。下面没有用。

垂直的LinearLayout

LinearLayout高度fillparent +权重

LinearLayout高度fillparent +权重

LinearLayout高度fillparent +权重

EndLinearLayout

做的是

相对布局

垂直的LinearLayout

LinearLayout高度fillparent +权重

LinearLayout高度fillparent +权重

LinearLayout高度fillparent +权重

EndLinearLayout

EndRelativeLayout

线性布局的根布局听起来含糊不清,其下的权重不起作用。当我说“没用”时,我的意思是,当我查看各种分辨率之间的图形布局后,屏幕一致性就破灭了很长时间。


0
<LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="9"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
<EditText
        android:id="@+id/edittxt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
</LinearLayout>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.