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及常见属性的主要内容,如果未能解决你的问题,请参考以下文章

layout_weight及相关属性

Android Layout_Weight 属性不起作用[重复]

如何从代码中动态设置 layout_weight 属性?

Android知识点剖析系列:深入了解layout_weight属性

Android:Layout_weight的深刻理解

[Android] android:layout_weight 属性的工作原理