What does android:layout_weight mean?
我不明白如何使用这个属性。 谁能告诉我更多关于它的事情?
使用
要使其工作,您还必须将高度或宽度(取决于您的方向)设置为0px。
简而言之,
LinearLayout支持为各个孩子分配权重。此属性为视图指定"重要性"值,并允许它展开以填充父视图中的任何剩余空间。视图的默认权重为零。
计算以分配孩子之间的任何剩余空间
一般来说,公式是:
space assigned to child = (child's individual weight) / (sum of weight of every child in Linear Layout)
例1
如果有三个文本框,其中两个声明权重为1,而第三个没有权重(0),则剩余空间分配如下:
1st text box = 1/(1+1+0)
2nd text box = 1/(1+1+0)
3rd text box = 0/(1+1+0)
例2
假设我们在水平行中有一个文本标签和两个文本编辑元素。标签没有指定
计算:
1st label = 0/(0+1+1)
2nd text box = 1/(0+1+1)
3rd text box = 1/(0+1+1)
相反,如果第一个文本框的
计算:
1st label = 0/(0+1+2)
2nd text box = 1/(0+1+2)
3rd text box = 2/(0+1+2)
来源文章
添加到其他答案,使这个工作最重要的是将布局宽度(或高度)设置为0px
1 | android:layout_width="0px" |
否则你会看到垃圾
如果有多个视图跨越
这是一个让事情更清晰的图像。
理论
术语布局权重与数学中加权平均的概念有关。就像在大学课堂上,作业价值30%,出勤率10%,期中价值20%,决赛价值40%。这些部分的分数在加权后会给出总分。
布局重量也是一样的。水平
布局
您使用的
1 2 3 4 5 6 7 8 | <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <!-- list of subviews --> </LinearLayout> |
请注意,必须使用
观点
水平
1 2 3 4 | <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> |
请注意,您需要将
在上面的
最后一点说明。如果您有许多使用
额外
以下是顶部图像的xml布局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | <?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> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <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> |
看起来像:
和
这样想,会更简单
如果您有3个按钮,它们的权重相应为1,3,1,它将像HTML中的表格一样工作
为该线提供5个部分:按钮1的1个部分,按钮2的3个部分和按钮1的1个部分
看待,
对我来说最好的解释之一是这个(来自Android教程,寻找第7步):
layout_weight is used in LinearLayouts to assign"importance" to Views within the layout. All Views have a default layout_weight of zero, meaning they take up only as much room on the screen as they need to be displayed. Assigning a value higher than zero will split up the rest of the available space in the parent View, according to the value of each View's layout_weight and its ratio to the overall layout_weight specified in the current layout for this and other View elements.
To give an example: let's say we have a text label and two text edit elements in a horizontal row. The label has no layout_weight specified, so it takes up the minimum space required to render. If the layout_weight of each of the two text edit elements is set to 1, the remaining width in the parent layout will be split equally between them (because we claim they are equally important). If the first one has a layout_weight of 1 and the second has a layout_weight of 2, then one third of the remaining space will be given to the first, and two thirds to the second (because we claim the second one is more important).
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight定义控件必须分别为其他控件获取多少空间。
请查看LinearLayout的weightSum和每个View的layout_weight。 android:weightSum ="4"android:layout_weight ="2"android:layout_weight ="2"他们的layout_height都是0px,但我不确定它是否相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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> |
额外的:
对于
1 | android:layout_height="0dp" |
对于
1 | android:layout_width="0dp" |
添加
结合两个答案
Flo&amp; rptwsthi和roetzi,
记得改变你的
此外,一些权重组合会导致一些布局无法显示(因为它占据了空间)。
要小心这一点。
顾名思义,布局权重指定特定字段或窗口小部件占据屏幕空间的空间量或百分比。
如果我们在水平方向指定权重,那么我们必须指定
同样,如果我们在垂直方向指定权重,那么我们必须指定