Layout_weight及常见属性
Posted pkangping
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Layout_weight及常见属性相关的知识,希望对你有一定的参考价值。
问题引入:如下代码,UI显示是怎样的
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1" android:gravity="center" android:text="111111111111"/> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="2" android:gravity="center" android:text="2"/> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="3" android:gravity="center" android:text="3"/> </LinearLayout>
会有错位,显示为如下
解决方法:在父类布局中添加baselineAligned="false"属性
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:baselineAligned="false"> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1" android:gravity="center" android:text="111111111111"/> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="2" android:gravity="center" android:text="2"/> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="3" android:gravity="center" android:text="3"/> </LinearLayout>
1、LinearLayout中的layout_weight属性,先按照空间声明的尺寸进行分配,然后再将剩下的尺寸按weight分配,看如下代码和显示结果
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:baselineAligned="false"> <TextView android:layout_width="match_parent" android:layout_height="48dp" android:layout_weight="1" android:gravity="center" android:text="111111111111"/> <TextView android:layout_width="match_parent" android:layout_height="48dp" android:layout_weight="2" android:gravity="center" android:text="2"/> <TextView android:layout_width="match_parent" android:layout_height="48dp" android:layout_weight="2" android:gravity="center" android:text="3"/> </LinearLayout>
计算结果(假设LinearLayout宽度为480):
剩余尺寸为:480-480*3=-480*2
TextView1的尺寸为:480+(-480*2)/5=480*(3/5)
TextView2,3的尺寸为:480+(-480*2)*(2/5)=480*(1/5)
结论:控件宽度+父控件剩余宽度*比例
2、weight和Layout_weight属性区别
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="6" android:baselineAligned="false"> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1" android:gravity="center" android:text="111111111111"/> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="2" android:gravity="center" android:text="2"/> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="2" android:gravity="center" android:text="3"/> </LinearLayout>
结论:layout_是父容器的属性处理,没有layout_是本身的属性
以上是关于Layout_weight及常见属性的主要内容,如果未能解决你的问题,请参考以下文章
Android Layout_Weight 属性不起作用[重复]