1. 程式人生 > >layout_weight以及常見屬性解析

layout_weight以及常見屬性解析

LinearLayout中的layout_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="horizontal"
tools:context=
"com.example.listviewrefreshupdata.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:layout_weight="1" android:gravity="center" android:background="#44ff0000" android:text="111111111111111111111111111"/> <TextView android:layout_width="wrap_content"
android:layout_height="50dp" android:gravity="center" android:layout_weight="2" android:background="#4400ff00" android:text="22222"/> <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:layout_weight="3" android:gravity="center" android:background="#440000ff" android:text=
"3333333333"/> </LinearLayout>
顯示效果為:


例二:

將三個TextView的寬度都設定為match_parent

<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="horizontal"
tools:context="com.example.listviewrefreshupdata.MainActivity">

   <TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="center"
android:background="#44ff0000"
android:text="11"/>
    <TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:layout_weight="2"
android:background="#4400ff00"
android:text="2"/>
    <TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="2"
android:gravity="center"
android:background="#440000ff"
android:text="2"/>
</LinearLayout>
顯示效果為:


理由:


例三:

如果要實現如下效果:


那麼可以設定父佈局的

android:weightSum屬性為2,然後設定textView的layout_weight為1
即:
<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="horizontal"
android:weightSum="2"
tools:context="com.example.listviewrefreshupdata.MainActivity">

   <TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="center"
android:background="#44ff0000"
android:text="111111111111"/>

</LinearLayout>

例四:

<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="horizontal"
tools:context="com.example.listviewrefreshupdata.MainActivity">

   <TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="center"
android:background="#44ff0000"
android:text="111111111111"/>
    <TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:gravity="center"
android:layout_weight="2"
android:background="#4400ff00"
android:text="2"/>
    <TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="3"
android:gravity="center"
android:background="#440000ff"
android:text="2"/>
</LinearLayout>
預期效果應該是:


實際效果是:


為了達到預期效果,應該設定父佈局的

android:baselineAligned="false"
即:

這樣就可以達到預期效果了

總結:凡是以 "layout_"開頭的屬性都是由父控制元件去設定的屬性,eg :layout_gravity:子控制元件相對父控制元件,gravity:子控制元件自身內容的相對位置