记录一下线性布局经常用到的一个属性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>