1. 程式人生 > >安卓開發--Layout--佈局---SDK(一)

安卓開發--Layout--佈局---SDK(一)

一個佈局定義使用者介面的視覺化結構,比如一個活動的使用者介面或應用程式部件

在執行時例項化佈局元素。你可以用兩種方式宣告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()一致。

一 寫XML

使用安卓的XML詞彙表,你可以迅速的設計UI佈局和他們包含的螢幕元素,同樣的方式,你可以在HTML裡建立WEB頁面

每個佈局檔案必須包含一個根元素,根元素必須是一個View或ViewGroup的物件。一旦你已經定義了一個根元素,你可以增加額外的佈局物件或視窗部件,就像子元素去

<?xml version=
"1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, I am a TextView"/><Buttonandroid: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中,你應該在你的活動中這樣載入它:

publicvoid 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

<Buttonandroid: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:告訴你的檢視大小和它的父檢視群組相同