FROM:http://developer.android.com/guide/topics/ui/declaring-layout.html#Position
一個佈局定義用戶界面的可視化結構,比如一個活動的用戶界面或應用程序部件
在運行時實例化佈局元素。你可以用兩種方式聲明Layout:
1)在XML文件中聲明UI元素
2)在運行時實例化佈局元素:你的應用程序能夠創建View和ViewGroup對象
Android框架,讓您可以靈活地使用這些方法中的一方或雙方的聲明和管理您的應用程序的用戶界面。
例如,你可以在XML文件中聲明你的應用程序的默認佈局,包括將出現的屏幕元素和他們的屬性。你
能在你的程序裏增加代碼修改屏幕對象的狀態,包括在運行時XML裏面聲明的對象。
在XML文件中聲明UI的益處是使你更好的從你的程序代碼中區分陳述。UI是你的程序
代碼的外表,這個意思就是你可以修改或改變它而不需要編輯你的代碼和重新編譯。
例如,你可以爲不同的屏幕方向,不同屏幕大小,不同語言創建XML佈局文件。另外
,在XML文件中聲明這個佈局,使得更加容易瞭解你的UI的結構,所有更容易調試問題。
所以,這個文件聚焦教會你如何在XML文件中聲明你的佈局。若干你對在運行時形成
View對象感興趣,查看ViewGroup和View參考。
通常情況下,聲明UI元素的XML詞彙表和類名字和方法的結構很接近,元素名稱和類
名一致,屬性名和方法一致。事實上你可以根據這個一致性,常常可以猜到那個屬性
對應類的方法,或哪個類對應XML元素。可是,不是所有的詞彙表是一致的。在一些情況下,
命名有些微小的不同。例如,EditText元素有一個text屬性,它和EditText.setText()一致。
在Common Layout Object裏學習不同的佈局類型:http://developer.android.com/guide/topics/ui/declaring-layout.html#CommonLayouts
一 寫XML
使用安卓的XML詞彙表,你可以迅速的設計UI佈局和他們包含的屏幕元素,同樣的方式,你可以在HTML裏創建WEB頁面
每個佈局文件必須包含一個根元素,根元素必須是一個View或ViewGroup的對象。一旦你已經定義了一個根元素,你可以增加額外的佈局對象或窗口部件,就像子元素去
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a Button" /> </LinearLayout>
二 加載XML資源
當你編譯你的程序,每個XML佈局文件被編譯進一個View資源。你應該從你的應用程序代碼中加載佈局資源,在你的
Activity.onCreate()回調函數中實現。然後通過調用setContentView()函數,傳遞這個View資源到你的佈局資源,它的形式上:
R.Layout.layout_file_name,例如,如果你的XML佈局保存在main_layout.xml中,你應該在你的活動中這樣加載它:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); }在你的活動總,活動開始的時候onCreate()回調方法被安卓框架調用。
package com.example.my4;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
三 屬性
每個View或ViewGroup對象支持他們自己的多樣的XML屬性。一些屬性被指定到一個View對象,例如TextView支持textSize屬性,但是這些屬性被任何View對象繼承,他們可能擴展了這個類。有一些是所有View對象共用的,以爲他們從根View類繼承,如id屬性。另外一些屬性被認爲是佈局參數,這些屬性描述確定的View對象的佈局方向。就像被對象的父對象ViewGroup定義。
四 ID
任何View對象都有一個整型的ID,在View樹中唯一的識別這個View。當應用程序被編譯,這個ID作爲一個整數被引用,但是ID在XML文件中作爲一個字符串,在id屬性中。這是一個XML的公共屬性,所有View對象都有,和經常被使用。一個ID的語法,在XML中的標籤是:
android:id="@+id/my_button"在字符串最開始位置的符號@,表明XML解析和這個ID字符串定義它爲ID資源。+符號表示這是一個新的資源名稱,必須創建和添加到我們的資源中,在R.java文件中。有大量的ID資源被安卓的框架提供。當要引用一個安卓的資源ID,你不需要+號,但是必須增加android包命名空間,像這樣:
android:id="@android:id/empty"有了android包命名空間,我們現在可以從android:R資源類中引用ID。
爲了從應用程序中創建View和引用它們,一個典型的模式是:
1)在你的佈局文件中定義一個View/widget,設置一個唯一的ID
<Button android:id="@+id/my_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/my_button_text"/>2)然後創建一個View對象的實例和從佈局中撲獲它
Button myButton = (Button) findViewById(R.id.my_button);當你創建一個RalatvieLayout時,爲View對象定義一個ID是非常重要的。在Relative佈局中,兄弟視圖能夠定義他們的佈局相關到另外兄弟視圖,這是通過唯一的ID實現。
在整棵視圖樹中,ID不需要唯一,可是他應該在一部分樹中唯一。你可能會搜索整個樹,所以你最好定義一個唯一的ID.
五 佈局參數
XML佈局屬性命名爲layout_something,定義這個View的佈局參數,
每個ViewGroup類實現一個嵌套類,它擴展ViewGroup.LayoutParams。這個子類包含屬性類型,它爲子視圖定義大小和位置,就像你看到的這個圖片,父視圖爲子視圖羣組定義佈局參數,包括視圖和視圖羣組。
注意,每個LayoutParams子類有他自己的設置值的語法。每個子元素必須定義LayoutParams,它適合它的父親,雖然他可以同樣爲它的孩子定義不同的LayoutParams。
所有的View羣組包括一個layout_width和layout_height,每個視圖需要定義它們。許多LayoutParams可以選擇的屬性。
你可以指定寬和高,
1)wrap_comtent:告訴你的視圖的大小根據它的需要
2)fill_parent:告訴你的視圖大小和它的父視圖羣組相同