Android 組件長寬比重設置總結

在android中的全部組件都有android:layout_height,android:layout_width,android:layout_weight這三個屬性,所以今天寫瞭這篇總結,總結關於組件佈局的問題。

各個屬性可以設置的值:

android:layout_height:wrap_content,match_parent(fill_parent),px
(pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), in (inches), mm (millimeters)

android:layout_width:wrap_content,match_parent(fill_parent),px
(pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), in (inches), mm (millimeters)

android:layout_weight:整數

針對3種情況展開討論:

假想一個列表框,需要放置3個組件,每個組件的長度可以是需要變化的(如TextView隨文本的長度變化),或者是長度固定的(如ImageView組件)。

每一個格子裡放一種組件,所以有8種情況,針對這8種情況分別對這3個組件進行這3個屬性的配置:

(在同一個LinearLayout如果不設比重則LinearLayout會先滿足第一個組件的長和寬,不管後面幾個組件是否還有顯示的空間)

變變變:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:orientation=”horizontal” >

<TextView
android:id=”@+id/textView1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_weight=”1″
android:text=”阿斯頓發薩達發薩達發薩達發射的阿斯頓發阿斯頓發” />

<TextView
android:id=”@+id/textView2″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_weight=”1″
android:text=”阿斯頓發薩達發薩達發薩達發射的阿斯頓發阿斯頓發” />

<TextView
android:id=”@+id/textView3″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_weight=”1″
android:text=”阿斯頓發薩達發薩達發薩達發射的阿斯頓發阿斯頓發” />

變變不:(image寬度不在比重分配的尺寸之中)

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<TextView
android:id=”@+id/textView1″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”1的阿斯頓發阿sadfasdfasdfsadfsadfsd斯頓發” />

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”3″
android:text=”2頓發阿斯asdfa sdfadsfsdfasdfasdfasdfadsf頓發” />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

變不變:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<TextView
android:id=”@+id/textView1″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”1的阿斯頓發阿sadfasdfasdfsadfsadfsd斯頓發” />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”3″
android:text=”2頓發阿斯asdfa sdfadsfsdfasdfasdfasdfadsf頓發” />

變不不:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

不不不:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

不不變:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

不變不:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

不變變:

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<ImageView
android:layout_width=”50dp”
android:layout_height=”50dp”
android:src=”@drawable/jiantou1″ />

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

<TextView
android:id=”@+id/textView2″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

細心的讀者可能已經明白其中的規律!

在layout_width設置為fill_parent的時候,layout_weight所代表的是你的控件要優先盡可能的大,但這個大是有限度的,即fill_parent.
在layout_width設置為wrap_content的時候,layout_weight所代表的是你的控件要優先盡可能的小,但這個小是有限度的,即wrap_content.

layout_height 同 layout_width.

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal” >

<TextView
android:id=”@+id/textView2″
android:layout_width=”0dp”
android:layout_height=”match_parent”
android:layout_weight=”2″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

<TextView
android:id=”@+id/textView2″
android:layout_width=”0dp”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

<TextView
android:id=”@+id/textView2″
android:layout_width=”0dp”
android:layout_height=”match_parent”
android:layout_weight=”1″
android:text=”2頓發阿斯asdfa ssdfsdgsdfgdfadsfsdfasdfasdfasdfadsf頓發” />

水平線性按比例分配android:layout_weight=”1″時也可將組件的android:layout_width=”0dp”,效果同android:layout_width=”wrap_content”,按正比例分配除去固定分配掉的尺寸所剩餘的尺寸。

當View的width,height為wrap_content或者0dp/px/sp時,若設定瞭weight,那麼layout就會從剩餘的未確定的layout中,根據weight的總和,也就是weightSum來計算需要為這樣的View設置多少長寬。
width = leftWidth * weight / weightSum;
height = leftHeight * weight / weightSum;
另外weight的計算和佈局,在linearLayout中Onlayout和OnMeasure函數。

發佈留言