了解weight属性

记录一下线性布局经常用到的一个属性weight。
经常使用,今天突然又深入了一点,在此记录。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <!-- 三个TextView的控件并没有对齐,但是对于其中文本第一行是对齐的。这是因为TextView在LinearLayout中会参考父类的基线 -->
    <!-- LinearLayout中增加属性 android:baselineAligned="false" 可避免这样的问题。 -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/id"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:background="#44ff0000"
            android:gravity="center"
            android:text="11111111" />

        <TextView
            android:id="@+id/id2"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="2"
            android:background="#4400ff00"
            android:gravity="center"
            android:text="2" />

        <TextView
            android:id="@+id/id3"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="3"
            android:background="#440000ff"
            android:gravity="center"
            android:text="3" />
    </LinearLayout>

    <TextView
        android:id="@+id/id0"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:background="#44ff0000"
        android:gravity="center"
        android:text="11111111" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <!-- width设置成wrap_content对weight设置的比值有影响 -->
        <!-- 说明LinearLayout中的layout_weight属性,首先按照控件声明的尺寸进行分配,然后再将剩下的尺寸按weight分配 -->
        <!-- 实际占用空间 = 控件宽度 + 父控件剩余宽度 * 比例 -->

        <TextView
            android:id="@+id/id4"
            android:layout_width="wrap_content"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:background="#44ff0000"
            android:gravity="center"
            android:text="11111111" />

        <TextView
            android:id="@+id/id5"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="2"
            android:background="#4400ff00"
            android:gravity="center"
            android:text="22222" />

        <TextView
            android:id="@+id/id6"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="3"
            android:background="#440000ff"
            android:gravity="center"
            android:text="3333" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <!-- 假设最外层是480dp  3个控件都是match_parent  剩余尺寸为 480 - 480*3 = -480*2 -->
        <!-- id7: 480+(-480*2)*(1/6)=480*(2/3) -->
        <!-- id8: 480+(-480*2)*(2/6)=480*(1/3)+ -->
        <!-- id9: 480+(-480*2)*(3/6)=0 -->
        <!-- 结论:实际占用空间 = 控件宽度 + 父控件剩余宽度 * 比例 -->

        <TextView
            android:id="@+id/id7"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:background="#44ff0000"
            android:gravity="center"
            android:text="11111111" />

        <TextView
            android:id="@+id/id8"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_weight="2"
            android:background="#4400ff00"
            android:gravity="center"
            android:text="22222" />

        <TextView
            android:id="@+id/id9"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_weight="3"
            android:background="#440000ff"
            android:gravity="center"
            android:text="3333" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="2"
        android:orientation="horizontal" >

        <!-- LinearLayout中设置android:weightSum="2" 实现LinearLayout中只有一个TextView控件使其占用父控件的一半 -->
        <!-- 有layout_开头的是交给父控件去处理 -->
        <TextView
            android:id="@+id/id10"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:background="#44ff0000"
            android:gravity="center"
            android:text="11111111" />

    </LinearLayout>

</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值