首先声明只有在Linearlayout中,该属性才有效。之所以android:layout_weight会引起争议,是因为在设置该属性的同时,设置android:layout_width为wrap_content和match_parent会造成两种截然相反的效果。如下所示:

[html] view plain copy print ?
  1. <LinearLayout
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content"
  4. android:orientation="horizontal">
  5. <TextView
  6. android:layout_width="match_parent"
  7. android:layout_height="wrap_content"
  8. android:layout_weight="1"
  9. android:background="@android:color/black"
  10. android:text="111"
  11. android:textSize="20sp"/>
  12. <TextView
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:layout_weight="2"
  16. android:background="@android:color/holo_green_light"
  17. android:text="222"
  18. android:textSize="20sp"/>

上面的布局将两个TextView的宽度均设为match_parent,一个权重为1,一个权重为2.得到效果如下:


可以看到权重为1的反而占了三分之二!

再看如下布局:

[html] view plain copy print ?
  1. <LinearLayout
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content"
  4. android:orientation="horizontal">
  5. <TextView
  6. android:layout_width="wrap_content"
  7. android:layout_height="wrap_content"
  8. android:layout_weight="1"
  9. android:background="@android:color/black"
  10. android:text="111"
  11. android:textSize="20sp"/>
  12. <TextView
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_weight="2"
  16. android:background="@android:color/holo_green_light"
  17. android:text="222"
  18. android:textSize="20sp"/>
  19. </LinearLayout>

即宽度为wrap_content,得到视图如下:


左边 TextView占比三分之一,又正常了。

android:layout_weight的真实含义是:一旦View设置了该属性(假设有效的情况下),那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比!

设屏幕宽度为L,在两个view的宽度都为match_parent的情况下,原有宽度为L,两个的View的宽度都为L,那么剩余宽度为L-(L+L) = -L, 左边的View占比三分之一,所以总宽度是L+(-L)*1/3 = (2/3)L.事实上默认的View的weight这个值为0,一旦设置了这个值,那么所在view在绘制的时候执行onMeasure两次的原因就在这。

Google官方推荐,当使用weight属性时,将width设为0dip即可,效果跟设成wrap_content是一样的。这样weight就可以理解为占比了!

更多相关文章

  1. android自定义视图属性(atts.xml,TypedArray)学习
  2. Android(安卓)ImageView的scaleType属性与adjustViewBounds属性
  3. EditText属性详解
  4. 小记初学android过程中遇到的小问题(android 4.4)
  5. 实现在一个界面里多个TextView的跑马灯效果
  6. Android(安卓)属性总结
  7. Android——属性动画(Property Animation)
  8. android布局属性详解
  9. Android(安卓)属性总结

随机推荐

  1. Javascript字符串
  2. 命名空间与mysql入门
  3. Javascript数组
  4. php 命名空间的使用
  5. PHP常用字符串函数库
  6. mysql语句、类的自动加载与引用
  7. oracle数据库无法打开修复过程
  8. ADAMoracle去中心化预言机网络如何激励喂
  9. 接口文档生成工具 一键生成文档 ApiPost
  10. PHP学习—数组Array