在android系統(tǒng)中列林,我們可以通過在xml資源文件中定義布局,一般的寫法是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffffff"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
包括自定義view在內(nèi)的所有View均可以在layout文件中指定布局參數(shù)者甲。
1.先說android:layout_width/android:layout_height
(1)每一個View必須要定義的兩個屬性是layout_width和layout_height砌创,這兩個屬性的值只能在"match_parent"鲫懒、"wrap_content"刽辙、"fill_parent"之間選擇一種。注意谦秧,match_parent和fill_parent實際上是一樣的撵溃,可以在ViewGroup的內(nèi)部類LayoutParams中找到定義,其值均為-1(說明:布局文件等xml文件在程序運行時會被解析成對應(yīng)的java對象)
/**
* Special value for the height or width requested by a View.
* FILL_PARENT means that the view wants to be as big as its parent,
* minus the parent's padding, if any. This value is deprecated
* starting in API Level 8 and replaced by {@link #MATCH_PARENT}.
*/
@SuppressWarnings({"UnusedDeclaration"})
@Deprecated
public static final int FILL_PARENT = -1;
/**
* Special value for the height or width requested by a View.
* MATCH_PARENT means that the view wants to be as big as its parent,
* minus the parent's padding, if any. Introduced in API Level 8.
*/
public static final int MATCH_PARENT = -1;
/**
* Special value for the height or width requested by a View.
* WRAP_CONTENT means that the view wants to be just large enough to fit
* its own internal content, taking its own padding into account.
*/
public static final int WRAP_CONTENT = -2;
FILL_PARENT / MATCH_PARENT / WRAP_CONTENT代表此view在父view中長寬的“確定方式”集歇,這種確定方式會直接影響此view在measure時確定自己的大小语淘。FILL_PARENT / MATCH_PARENT這兩種方式代表此view的寬(或者高)將會和父控件的寬高相等,WRAP_CONTENT這種方式代表此view的寬高值將會按照包裹自身內(nèi)容的方式來確定惶翻。
(2)android:layout_width/android:layout_height兩種屬性還可以指定具體的寬高,此時的view的大小在一般情況下就是這兩種屬性指定的精確大小纺荧,如果此view的父view過小颅筋,那么這個view可能顯示不全。
(3)在LinearLayout控件中议泵,android:layout_width/android:layout_height還可以和android:layout_weight一同使用,其中l(wèi)ayout_weight標識此view所占的空間比例型奥,通常我們將layout_weight設(shè)置為大于0的數(shù)值碉京,并將(android:layout_width或android:layout_height)設(shè)置為0。LinearLayout的orientation如果是水平方向收夸,那么layout_weight指水平方向的比例大小,豎直方向同理厘灼。
2.再說android:width/android:height
不是所有的view都具有android:width/android:height這兩種屬性,且即便具有這兩種屬性设凹,也不必聲明。這兩個屬性一般用來控制view的精確大小月匣,如64dp奋姿,1px等,在TextView等控件中可以找到此屬性称诗,但是一般情況下是不會使用這兩個屬性的。在給view定義精確大小時癣诱,采用的方式是給android:layout_width/android:layout_height兩者設(shè)置尺寸值大小袜香,如16dp,60px等等蜈首。