天天看點

Android使用者界面設計:架構布局(轉)

摘要:架構布局是Android開發者組織視圖控件最簡單和最有效的布局之一。通過本文,你将學到所有關于架構布局的知識,它們主要用來在螢幕上組織特别的或重疊的視圖控件。使用得當的話,很多有趣的Android程式使用者界面都可以基于架構布局來設計。

  架構布局是将控件組織在Android程式的使用者界面中最簡單的布局類型之一。

  了解布局對于良好的Android程式設計來說是非常重要的。在這個教程裡,你将學到是以關于架構布局的知識,它們主要用來在螢幕上組織特别的或重疊的視圖控件。使用得當的話,很多有趣的Android程式使用者界面都可以基于架構布局來設計。

  架構布局是Android開發者組織視圖控件最簡單和最有效的布局之一。它們使用得比其它一些布局要少一些,隻是因為它們一般隻用于顯示單個視圖,或重疊的視圖。架構布局常用作容器布局,因為它一般隻有一個子視圖(通常是另一個布局,用于組織多個視圖)。

  技巧:事實上,你會看到架構布局是作為你設計的任何布局資源的父布局來使用的。如果你在層級視圖工具(Hierarchy Viewer tool,一個很有用的調試你的程式布局的工具)建立你的程式,你會發現你設計的任何布局資源都被顯示在一個父布局中——一個架構布局。

  架構布局非常簡單,這使得它們非常高效。它們可以在XML布局資源檔案中定義,也可以通過Java代碼在程式中定義。架構布局中的一個子視圖總是被繪制到相對于螢幕的左上角上。如果存在多個子視圖,那麼他們被按順序一個堆疊在另一個上面的方式繪制。這意味着第一個添加到架構布局的視圖将顯示在棧的底部,最後添加的視圖會顯示在最頂部。

  讓我們來看一個簡單的例子。我們假設有一個架構布局大小調整到控制整個螢幕(換句話說,layout_width and layout_height屬性都設定為match_parent)。我們要添加三個子控件到這個架構布局:

一個有湖面圖檔的ImageView。

一個在螢幕頂部顯示的TextView。

一個在螢幕底部顯示的(使用layout_gravity屬性将TextView下沉到父布局的底部)TextView。

  下圖展示這種類型的布局在螢幕上會是什麼樣:

Android使用者界面設計:架構布局(轉)

  設計程式使用者界面最友善和可維護的方法是建立XML布局資源。這個方法極大地簡化了UI設計過程,将很多靜态建立和使用者界面控件的布局以及控件屬性的定義移到XML中去,取代了寫代碼。

  XML布局資源必須存儲在/res/layout項目目錄下。讓我們看看前一節介紹的架構布局。同樣地,這個螢幕基本上就是一個有三個子視圖的架構布局:一個充滿整個螢幕的圖檔,兩個文本控件繪制在它上面,每一個文本控件都是預設透明背景。這個布局資源檔案命名為/res/layout/framed.xml,在XML中如下定義:

<?xml version="1.0" encoding="utf-8"?>

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent" android:layout_height="fill_parent">

 <ImageView android:id="@+id/ImageView01" android:layout_height="fill_parent"

android:layout_width="fill_parent" android:src="@drawable/lake"

android:scaleType="matrix"></ImageView>

 <TextView android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#000"

android:textSize="40dp"

android:text="@string/top_text" />

android:text="@string/bottom_text"

android:layout_gravity="bottom" android:gravity="right"

android:textColor="#fff" android:textSize="50dp" /> </FrameLayout>

  回憶一下,在Activity中,隻需要在onCreate()方法中添加一行代碼來在螢幕上加載和顯示布局資源。如果布局資源存放在/res/layout/framed.xml檔案中,這行代碼應該是:

setContentView(R.layout.framed);

  你也可以用程式建立和配置架構布局。這通過使用FrameLayout類(android.widget.FrameLayout)來實作。你會在 RelativeLayout.LayoutParams類中找到具體的參數。同樣地,典型的布局參數 (android.view.ViewGroup.LayoutParams),比如layout_height和layout_width,以及邊距參數(ViewGroup.MarginLayoutParams),也能用在FrameLayout對象上。

  你必須用Java建立螢幕内容,然後向setContentView()方法提供一個包含所有要作為子視圖顯示的控件内容的父布局對象,而不是像前面所示直接使用setContentView()方法來加載布局資源。在這裡,你的父布局就是架構布局。例如,下面的代碼示例了如何用程式重新建立前面描述的相同的布局。特别地,我們在活動中執行個體化一個FrameLayout,并在它的onCreate()方法中先添加一個ImageView控件然後再添加兩個TextView控件:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView tv1 = new TextView(this);

tv1.setText(R.string.top_text);

tv1.setTextSize(40);

tv1.setTextColor(Color.BLACK);

TextView tv2 = new TextView(this);

tv2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM));

tv2.setTextSize(50);

tv2.setGravity(Gravity.RIGHT);

tv2.setText(R.string.bottom_text);

tv2.setTextColor(Color.WHITE);

ImageView iv1 = new ImageView(this);

iv1.setImageResource(R.drawable.lake);

iv1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

iv1.setScaleType(ScaleType.MATRIX);

FrameLayout fl = new FrameLayout(this);

fl.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

fl.addView(iv1);

fl.addView(tv1);

fl.addView(tv2);

setContentView(fl);

}

  最終螢幕運作結果和前面圖檔展示的一模一樣。

  當你可以自由使用其它強大布局類型,如線性布局,相對布局和表格布局時,很容易會忘了架構布局。架構布局的效率使得它是包含很少視圖控件的螢幕的很好的選擇(主螢幕,隻有一個畫布的遊戲界面等)。有些時候其它低效的布局設計可以簡化為一個更有效率的架構布局設計,而其它時候使用更專業的布局類型會更合适。當你想要堆疊視圖時架構布局是一般的選擇。

  FrameLayout相對比較簡單。因為這一點,很多其它布局類型和視圖控件都是基于它的。例如,ScrollView就是一個在子内容太大而不能在布局界限内完全展示時出現滾動條的架構布局。所有主螢幕(Home螢幕)應用小工具都位于一個架構布局中。

  對于所有架構布局需要注意的是它們除了通常的背景以外還可以設定前景色。這通過android:foreground XML屬性來實作。這也可以用于架構下面的視圖。

  Android程式Android程式使用者界面使用布局來定義,架構布局是最簡單和最高效的布局類型之一。架構布局的子控件被相對于布局的左上角來繪制。如果架構布局中存在多個子視圖,它們将按順序繪制,最後一個子控件繪制在最上面。

http://kb.cnblogs.com/page/98726/

繼續閱讀