Android 布局属性 Android:layout_weight 总结

Android 为我们提供了五种布局方式

  1. 线性布局:LinerLayout
  2. 表格布局:TableLayout
  3. 相对布局:RelativeLayout
  4. 绝对布局:AbsoluteLayout
  5. 帧布局:FrameLayout

其中最常用的应该就是线性布局了。而在线性布局中有一个属性layout_weight。这个属性的字面意思是权重,就是说可以通过这个属性来设置控件在线性布局中的大小比例。
但是在使用中我们发现,当线性布局中的控件使用match_parent时控件大小与权重比例居然相反,而使用wrap_content时甚至weight甚至毫无作用。这是为什么呢?
按照Google官方的说法,layout_weight属性是用来分配Linerlayout中剩余的屏幕空间的。
现在我们来做一下算术题:

假设屏幕宽度是W,LinerLayout的布局方式是横向,宽度是屏幕宽度即W。Linerlayout中有两个控件,宽度都是match_parent即W.现在定义两个控件左边的为2,右边的为1.
现在我们来算一下,两个控件的宽度:
剩余宽度 S = W - 2*W = -W.
左边控件分配到的剩余宽度 SL = (2/3)*S =-(2/3)W
右边控件分配到的剩余宽度 SL = (1/3)S = -(1/3)W
那么左边控件的实际宽度就是 -(2/3)W+W = (1/3)W
那么右边控件的实际宽度就是 -(1/3)W+W = (2/3)W
于是权重设置为2:1 但实际显示效果却是1:2就是这样来的。有兴趣的同学可以算一下使用wrap_content时显示的比例。可以发现根本毫无规律。
那么我们就不用layout_weight这一属性了吗?
当然不是
按照Google官方推荐的方法,在使用layout_weight时。可以将width设置为0dp(当然布局方式是竖向的时候是height)。
希望对看到这篇文章的人有帮助:D

你可能感兴趣的:(Android)