Android-android界面布局的疑惑,关于layout_weight的认知
我们从android文档中了解到android:layout_weight是针对linelayout中某个子控件所占空间的权重。如果是0表示可以拉伸,大于0的话取决于相同层次控件的weight值。比如下面这个布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:background="#FF0000"
android:layout_height="match_parent" android:layout_width="match_parent"
android:layout_weight="1" />
<LinearLayout android:background="#00FF00"
android:layout_height="match_parent" android:layout_width="match_parent"
android:layout_weight="1" />
</LinearLayout>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
貌似之前看文档解释其实是说显示时是按照比例来的,比如有两个元素,A元素的layout_weight设为1,B元素的layout_weight设为2,那么在显示时A就显示整个view高度或宽度的2/(1+2),B显示为1/(1+2).是按照整体比例来显示的。
额,用layout_weight的话,应该习惯于把layout_width或者layout_height改成0dip把,官方文档上说是为了更好的layout性能。
同意楼上 刚遇到相同的问题 把宽度改成0dip就解决了
这估计是计算方式的原因,同意二楼的说法,反过来但实现的效果是一样的。
找到原因了,android:layout_height="fill_parent"这个属性值改成
android:layout_height="wrap_content"或者android:layout_height="0dip",
这样比例才不会反过来,虽然可以把代码改成这样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:background="#FF0000"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:layout_weight="1" />
<LinearLayout android:background="#00FF00"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:layout_weight="2" />
</LinearLayout>
毕竟不符合人的直觉,多数时候还是使用android:layout_height="0dip"的技巧。因此,修改成:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:background="#FF0000"
android:layout_height="0dip" android:layout_width="fill_parent"
android:layout_weight="2" />
<LinearLayout android:background="#00FF00"
android:layout_height="0dip" android:layout_width="fill_parent"
android:layout_weight="1" />
</LinearLayout>
layout_weight我觉得可以这样理解,当layout_height或者layout_width为wrap_content时表示该组件要尽可能的小,layout_weight越大,组件站的区域越小;当layout_height或者layout_width为match_parent时表示该组件要尽可能的大,layout_weight越大,组件站的区域越大