我不知道如何使用这个属性。有人能告诉我更多关于它的信息吗?
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight定义控件必须分别获得多少空间给其他控件。
简而言之,layout_weight指定布局中要分配给View的额外空间。
layout_weight
LinearLayout支持为单个子级分配权重。此属性为视图分配一个“重要性”值,并允许它展开以填充父视图中的任何剩余空间。视图的默认权重为零。
一般来说,公式是:
分配给孩子的空间=(孩子的个体重量)/(线性布局中每个孩子的重量总和)
如果有三个文本框,其中两个声明权重为1,而第三个没有权重(0),则剩余空间分配如下:
第一个输入框=1/(1+1+0) 第二个输入框=1/(1+1+0) 第三个输入框=0/(1+1+0)
第一个输入框=1/(1+1+0)
第二个输入框=1/(1+1+0)
第三个输入框=0/(1+1+0)
假设我们在水平行中有一个文本标签和两个文本编辑元素。该标签没有指定layout_weight,因此它占用渲染所需的最小空间。如果两个文本编辑元素中每个的layout_weight设置为1,则父布局中的剩余宽度将在它们之间平均分配(因为我们声称它们同等重要)。
计算方法:
第1个标签=0/(0+1+1) 第二个输入框=1/(0+1+1) 第三个输入框=1/(0+1+1)
第1个标签=0/(0+1+1)
第二个输入框=1/(0+1+1)
第三个输入框=1/(0+1+1)
相反,如果第一个输入框的layout_weight为1,而第二个输入框的layout_weight为2,则剩余空间的三分之一将给第一个,三分之二给第二个(因为我们声称第二个更重要)。
第1个标签=0/(0+1+2) 第二个输入框=1/(0+1+2) 第三个输入框=2/(0+1+2)
第1个标签=0/(0+1+2)
第二个输入框=1/(0+1+2)
第三个输入框=2/(0+1+2)
文章来源
使用layout_weight,您可以指定多个视图之间的大小比例。例如,您有一个MapView和一个table,它们应该显示地图的一些附加信息。地图应该使用屏幕的3/4,表格应该使用屏幕的1/4。然后您将map的layout_weight设置为3,table的layout_weight设置为1。
MapView
table
map
要使其工作,您还必须将高度或宽度(取决于您的方向)设置为0px。
对我来说最好的解释之一是这个(来自Android教程,查找步骤7):
layout_weight在LinearLayout中用于为布局中的视图分配“重要性”。所有视图的默认layout_weight为零,这意味着它们仅占用需要显示的屏幕空间。分配高于零的值将根据每个视图的layout_weight的值及其与当前布局中为此和其他视图元素指定的总体layout_weight的比率分割父视图中的其余可用空间。 举个例子:假设我们在一个水平行中有一个文本标签和两个文本编辑元素。该标签没有指定layout_weight,因此它占用渲染所需的最小空间。如果两个文本编辑元素的layout_weight都设置为1,则父布局中剩余的宽度将在它们之间平均分割(因为我们声称它们同等重要)。如果第一个layout_weight为1,第二个layout_weight为2,那么剩余空间的三分之一将给第一个,三分之二给第二个(因为我们声称第二个更重要)。
layout_weight在LinearLayout中用于为布局中的视图分配“重要性”。所有视图的默认layout_weight为零,这意味着它们仅占用需要显示的屏幕空间。分配高于零的值将根据每个视图的layout_weight的值及其与当前布局中为此和其他视图元素指定的总体layout_weight的比率分割父视图中的其余可用空间。
举个例子:假设我们在一个水平行中有一个文本标签和两个文本编辑元素。该标签没有指定layout_weight,因此它占用渲染所需的最小空间。如果两个文本编辑元素的layout_weight都设置为1,则父布局中剩余的宽度将在它们之间平均分割(因为我们声称它们同等重要)。如果第一个layout_weight为1,第二个layout_weight为2,那么剩余空间的三分之一将给第一个,三分之二给第二个(因为我们声称第二个更重要)。
这样想,会更简单
如果你有3个按钮,它们的权重相应地为1,3,1,它将像超文本标记语言中的表格一样工作
为该线提供5部分:1部分用于按钮1,3部分用于按钮2,1部分用于按钮1
问候,
除了其他答案,最重要的是将布局宽度(或高度)设置为0px
android:layout_width="0px"
否则你会看到垃圾
结合两个答案从
Flo&rptwsthi和roetzi
请记住更改layout_width=0dp/px,否则layout_weight的行为将与最大数字占用最小空间和最小数字占用最大空间相反。
layout_width=0dp/px
此外,一些权重组合会导致一些布局无法显示(因为它过度占用了空间)。
小心这个。
顾名思义,布局权重指定特定字段或小部件应占用屏幕空间的数量或百分比。 如果我们以水平方向指定重量,那么我们必须指定layout_width = 0px。 同样,如果我们以垂直方向指定重量,那么我们必须指定layout_height = 0px。
layout_width = 0px
layout_height = 0px
View8告诉Android如何在LinearLayout中分发View。然后Android首先计算所有指定权重的View所需的总比例,并根据它指定的屏幕份额放置每个View。在以下示例中,Android看到TextViews的layout_weight为0(这是默认值),EditTexts的layout_weight为View0,而View1的权重为View2。所以Android分配了“足够”的空间来显示View3和View4,然后将屏幕宽度的剩余部分分成5个相等的部分,其中两个分配给View5,两个分配给View6,最后一部分分配给View7:
View
LinearLayout
TextView
0
EditText
<LinearLayout android:orientation="horizontal" ...> <TextView android:id="@+id/tvUsername" android:text="Username" android:layout_width="wrap_content" ... /> <EditText android:id="@+id/etUsername" android:layout_width="0dp" android:layout_weight="2" ... /> <TextView android:id="@+id/tvPassword" android:text="Password" android:layout_width="wrap_content" /> <EditText android:id="@+id/etPassword" android:layout_width="0dp" android:layout_weight="2" ... /> <Button android:id="@+id/bLogin" android:layout_width="0dp" android:layout_weight="1" android:text="Login"... /> </LinearLayout>
它看起来像: 和
如果有多个视图跨越LinearLayout,那么layout_weight为它们提供了一个比例大小。具有更大layout_weight值的视图“重量”更大,因此它获得更大的空间。
这是一个图像,使事情更清楚。
布局权重这个词与数学中的加权平均概念有关。这就像在大学课堂上,家庭作业价值30%,出勤率价值10%,期中考试价值20%,期末考试价值40%。你在这些部分的分数,加权在一起,就会得到你的总成绩。
布局权重也是如此。水平LinearLayout中的Views可以占总宽度的一定百分比。(或者垂直LinearLayout的高度百分比。)
Views
您使用的LinearLayout看起来像这样:
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <!-- list of subviews --> </LinearLayout>
请注意,您必须为LinearLayout使用layout_width="match_parent"。如果您使用wrap_content,那么它将不起作用。另请注意,layout_weight不适用于RelativeLayout中的视图(请参阅这里和这里以获取处理此问题的SO答案)。
layout_width="match_parent"
wrap_content
水平LinearLayout中的每个视图看起来像这样:
<Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" />
请注意,您需要将layout_width="0dp"与layout_weight="1"一起使用。忘记这会导致许多新用户问题。(请参阅这篇文章了解不将宽度设置为0可以获得的不同结果。)如果您的视图在垂直LinearLayout中,那么您当然会使用layout_height="0dp"。
layout_width="0dp"
layout_weight="1"
layout_height="0dp"
在上面的Button示例中,我将权重设置为1,但您可以使用任何数字。只有总数才重要。您可以在我发布的第一张图片中的三行按钮中看到,数字都是不同的,但由于比例相同,加权宽度不会在每一行中改变。有些人喜欢使用总和为1的十进制数字,以便在复杂的布局中清楚地知道每个部分的权重。
Button
最后一个注意事项。如果您有很多使用layout_weight的嵌套布局,它可能会对性能不利。
这是顶部图像的xml布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android:layout_weight=" android:textSize="24sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="1" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="2" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="1" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android:layout_weight=" android:textSize="24sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="10" android:text="10" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="20" android:text="20" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="10" android:text="10" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android:layout_weight=" android:textSize="24sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".25" android:text=".25" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".50" android:text=".50" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".25" android:text=".25" /> </LinearLayout> </LinearLayout>
安卓:权重和="4"安卓:layout_weight="2"安卓:layout_weight="2"他们的layout_height都是0px,但我不确定这是否相关
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="4"> <fragment android:name="com.example.SettingFragment" android:id="@+id/settingFragment" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="2" /> <Button android:id="@+id/dummy_button" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="2" android:text="DUMMY" /> </LinearLayout>
额外:
对于vertical方向,不要忘记将height设置为0dp
vertical
height
android:layout_height="0dp"
对于horizontal方向,不要忘记将width设置为0dp
horizontal
width
android:layout_width="0dp"
添加android:autoSizeTextType="uniform"将自动调整文本大小
android:autoSizeTextType="uniform"