1. 程式人生 > >Android 動態載入佈局檔案

Android 動態載入佈局檔案

本文轉自:原文地址

Android的基本UI介面一般都是在xml檔案中定義好,然後通過activity的setContentView來顯示在介面上,這是Android UI的最簡單的構建方式。其實,為了實現更加複雜和更加靈活的UI介面,往往需要動態生成UI介面,甚至根據使用者的點選或者配置,動態地改變UI,本文即介紹該技巧。

假設Android工程的一個xml檔名為activity_main.xml,定義如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <TextView
        android:id="@+id/DynamicText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

在 MainActivity 中,希望顯示這個簡單的介面有三種方式(注:下面的程式碼均在 MainActivity 的 onCreate() 函式中實現 )。

(1) 第一種方式,直接通過傳統的 setContentView(R.layout.*) 來載入,即:

setContentView(R.layout.activity_main);
                                                            
TextView text = (TextView)this.findViewById(R.id.DynamicText);
text.setText("Hello World");
  (2) 第二種方式,通過 LayoutInflater 來間接載入,即:

LayoutInflater mInflater = LayoutInflater.from(this);     
View contentView  = mInflater.inflate(R.layout.activity_main,null);
                                                                                                            
TextView text = (TextView)contentView.findViewById(R.id.DynamicText);
text.setText("Hello World");
                                               
setContentView(contentView);

注:

LayoutInflater 相當於一個“佈局載入器”,有三種方式可以從系統中獲取到該佈局載入器物件,如:

方法一: LayoutInflater.from(this);

方法二: (LayoutInflater)this.getSystemService(this.LAYOUT_INFLATER_SERVICE);

方法三: this.getLayoutInflater();

通過該物件的 inflate方法,可以將指定的xml檔案載入轉換為View類物件,該xml檔案中的控制元件的物件,都可以通過該View物件的findViewById方法獲取。

(3)第三種方式,純粹地手工建立 UI 介面

xml 檔案中的任何標籤,都是有相應的類來定義的,因此,我們完全可以不使用xml 檔案,純粹地動態建立所需的UI介面,示例如下:


LinearLayout layout = new LinearLayout(this);
                                                                                                       
TextView text = new TextView(this);
text.setText("Hello World");
text.setLayoutParams(new    ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
                                                                                                       
layout.addView(text);
                                                                                                       
setContentView(layout);


Android動態UI建立的技巧就說到這兒了,在本示例中,為了方便理解,都是採用的最簡單的例子,因此可能看不出動態建立UI的優點和用途,但是不要緊,先掌握基本技巧,後面的文章中,會慢慢將這些技術應用起來,到時侯就能理解其真正的應用場景了。