Android開發中LayoutInflater用法詳解_Android

來源:互聯網
上載者:User

本文執行個體講述了Android開發中LayoutInflater用法。分享給大家供大家參考,具體如下:

在實際開發中LayoutInflater這個類還是非常有用的,它的作用類似於findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局檔案,並且執行個體化;而findViewById()是找xml布局檔案下的具體widget控制項(如Button、TextView等)。

具體作用:

1、對於一個沒有被載入或者想要動態載入的介面,都需要使用LayoutInflater.inflate()來載入;

2、對於一個已經載入的介面,就可以使用Activiyt.findViewById()方法來獲得其中的介面元素。

LayoutInflater 是一個抽象類別,在文檔中如下聲明:

public abstract class LayoutInflater extends Object

獲得 LayoutInflater 執行個體的三種方式

1. LayoutInflater inflater = getLayoutInflater();//調用Activity的getLayoutInflater()

2. LayoutInflater inflater = LayoutInflater.from(context);

3. LayoutInflater inflater =  (LayoutInflater)context.getSystemService
                              (Context.LAYOUT_INFLATER_SERVICE);

其實,這三種方式本質是相同的,從源碼中可以看出:

getLayoutInflater():

Activity 的 getLayoutInflater() 方法是調用 PhoneWindow 的getLayoutInflater()方法,看一下該原始碼:

public PhoneWindow(Context context){ super(context); mLayoutInflater = LayoutInflater.from(context);}

可以看出它其實是調用 LayoutInflater.from(context)。

LayoutInflater.from(context):

public static LayoutInflater from(Context context){ LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService   (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {  throw new AssertionError("LayoutInflater not found."); } return LayoutInflater;}

可以看出它其實調用 context.getSystemService()。

結論:所以這三種方式最終本質是都是調用的Context.getSystemService()。

另外getSystemService()是Android很重要的一個API,它是Activity的一個方法,根據傳入的NAME來取得對應的Object,然後轉換成相應的服務物件。以下介紹系統相應的服務。

傳入的Name 返回的對象 說明
WINDOW_SERVICE WindowManager 管理開啟的視窗程序
LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml裡定義的view
ACTIVITY_SERVICE ActivityManager 管理應用程式的系統狀態
POWER_SERVICE PowerManger 電源的服務
ALARM_SERVICE AlarmManager 鬧鐘的服務
NOTIFICATION_SERVICE NotificationManager 狀態列的服務
KEYGUARD_SERVICE KeyguardManager 鍵盤鎖的服務
LOCATION_SERVICE LocationManager 位置的服務,如GPS
SEARCH_SERVICE SearchManager 搜尋的服務
VEBRATOR_SERVICE Vebrator 手機震動的服務
CONNECTIVITY_SERVICE Connectivity 網路連接的服務
WIFI_SERVICE WifiManager Wi-Fi服務
TELEPHONY_SERVICE TeleponyManager 電話語音

inflate 方法

通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式,傳回值均是 View 對象,如下:

public View inflate (int resource, ViewGroup root)public View inflate (XmlPullParser parser, ViewGroup root)public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)public View inflate (int resource, ViewGroup root, boolean attachToRoot)

示意代碼:

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));//EditText editText = (EditText)findViewById(R.id.content);// errorEditText editText = (EditText)view.findViewById(R.id.content);

對於上面代碼,指定了第二個參數 ViewGroup root,當然你也可以設定為 null 值。

注意:

·inflate 方法與 findViewById 方法不同;
·inflater 是用來找 res/layout 下的 xml 布局檔案,並且執行個體化;
·findViewById() 是找具體 xml 布局檔案中的具體 widget 控制項(如:Button、TextView 等)。

更多關於Android相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控制項用法總結》

希望本文所述對大家Android程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.