本文共 1222 字,大约阅读时间需要 4 分钟。
在Android的控件布局中,layout_weight
属性确实是一个有一点特殊的设置属性。理解它的使用方式是许多开发者在开始Android开发时会遇到的一个问题。
以下面的布局代码为例,假设有两个TextView
控件:
它们都是水平方向排列,layout_weight="1"
。从这个布局你可以很容易地误认为,它们平分了整个LinearLayout
控件的水平空间,也就是各自占据50%的宽度。然而,实际情况并非如此。
###pesan
更仔细地分析:
TextView
控件的布局为layout_width="wrap_content"
,这意味着它们会根据内容自动调整宽度。TextView
-888有888个字符,而TextView
-999999有999999个字符。显然,999999字符的宽度比888字符的宽度要大得多。因此,在实际显示中:
TextView
-999999的宽度加上它分配到的空闲一半空间会超过TextView
-888的宽度加上它分配到的空闲一半空间。这就是layout_weight
属性的“奇葩”之处。很多开发者误以为layout_weight
是用来平分整个空间的,但实际上它只用来平分剩余的空闲空间。
所以,当使用layout_weight
时,其效果并非直接将控件分配到整个空间中,而是根据比例分配剩余的空闲空间。只有在控件的宽度(或高度)设为0dp
时,layout_weight
才会起到真正的分割作用。这就意味着,对于水平布局,我们需要将元素的layout_width
设为0dp
,然后使用layout_weight
来分配空间比例。
###示例
假设我们有一个水平布局,包含两个TextView
控件:
在这个布局中,两个TextView
控件将平分LinearLayout
的总宽度。即每个控件将占据50%的空间。这种情况下,layout_weight="1"
意味着每个控件都分配到同样的空闲空间,这正是layout_weight
的真正作用。
###竖直布局的应用
类似的,layout_weight
也可以在竖直布局中使用。例如,如果我们想要给两个TextView
控件在垂直方向上平分空间,我们可以将它们的layout_height
设为0dp
,并将各自的layout_weight
设为1
。这样,它们将均等地分配LinearLayout
的高度。
###总结
总之,layout_weight
是一个非常有用的布局属性,但它并不是用来直接分割控件的空间,而是用来分配剩余空闲空间的比例。当将控件的尺寸设为0dp
时,它们才会根据layout_weight
的值来分割整个空间。如果不进行这样的设定,layout_weight
的效果将大打折扣。
转载地址:http://idgyk.baihongyu.com/