Android-android界面布局的疑惑,关于layout_weight的认知

Android-android界面布局的疑惑,关于layout_weight的认知

甜柠檬 发布于 2016-12-27 字数 816 浏览 1200 回复 6

我们从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>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

瑾兮 2017-08-27 6 楼

貌似之前看文档解释其实是说显示时是按照比例来的,比如有两个元素,A元素的layout_weight设为1,B元素的layout_weight设为2,那么在显示时A就显示整个view高度或宽度的2/(1+2),B显示为1/(1+2).是按照整体比例来显示的。

清晨说ぺ晚安 2017-08-26 5 楼

额,用layout_weight的话,应该习惯于把layout_width或者layout_height改成0dip把,官方文档上说是为了更好的layout性能。

清晨说ぺ晚安 2017-07-13 4 楼

同意楼上 刚遇到相同的问题 把宽度改成0dip就解决了

晚风撩人 2017-06-16 3 楼

这估计是计算方式的原因,同意二楼的说法,反过来但实现的效果是一样的。

晚风撩人 2017-06-04 2 楼

找到原因了,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>

夜无邪 2017-05-01 1 楼

layout_weight我觉得可以这样理解,当layout_height或者layout_width为wrap_content时表示该组件要尽可能的小,layout_weight越大,组件站的区域越小;当layout_height或者layout_width为match_parent时表示该组件要尽可能的大,layout_weight越大,组件站的区域越大