Android開(kāi)發(fā)中LayoutInflater用法詳解
本文實(shí)例講述了Android開(kāi)發(fā)中LayoutInflater用法。分享給大家供大家參考,具體如下:
在實(shí)際開(kāi)發(fā)中LayoutInflater這個(gè)類(lèi)還是非常有用的,它的作用類(lèi)似于findViewById()。不同點(diǎn)是LayoutInflater是用來(lái)找res/layout/下的xml布局文件,并且實(shí)例化;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)。
具體作用:
1、對(duì)于一個(gè)沒(méi)有被載入或者想要?jiǎng)討B(tài)載入的界面,都需要使用LayoutInflater.inflate()來(lái)載入;
2、對(duì)于一個(gè)已經(jīng)載入的界面,就可以使用Activiyt.findViewById()方法來(lái)獲得其中的界面元素。
LayoutInflater 是一個(gè)抽象類(lèi),在文檔中如下聲明:
public abstract class LayoutInflater extends Object
獲得 LayoutInflater 實(shí)例的三種方式
1. LayoutInflater inflater = getLayoutInflater();//調(diào)用Activity的getLayoutInflater()
2. LayoutInflater inflater = LayoutInflater.from(context);
3. LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
其實(shí),這三種方式本質(zhì)是相同的,從源碼中可以看出:
getLayoutInflater():
Activity 的 getLayoutInflater() 方法是調(diào)用 PhoneWindow 的getLayoutInflater()方法,看一下該源代碼:
public PhoneWindow(Context context) { super(context); mLayoutInflater = LayoutInflater.from(context); }
可以看出它其實(shí)是調(diào)用 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; }
可以看出它其實(shí)調(diào)用 context.getSystemService()。
結(jié)論:所以這三種方式最終本質(zhì)是都是調(diào)用的Context.getSystemService()。
另外getSystemService()是Android很重要的一個(gè)API,它是Activity的一個(gè)方法,根據(jù)傳入的NAME來(lái)取得對(duì)應(yīng)的Object,然后轉(zhuǎn)換成相應(yīng)的服務(wù)對(duì)象。以下介紹系統(tǒng)相應(yīng)的服務(wù)。
傳入的Name | 返回的對(duì)象 | 說(shuō)明 |
WINDOW_SERVICE | WindowManager | 管理打開(kāi)的窗口程序 |
LAYOUT_INFLATER_SERVICE | LayoutInflater | 取得xml里定義的view |
ACTIVITY_SERVICE | ActivityManager | 管理應(yīng)用程序的系統(tǒng)狀態(tài) |
POWER_SERVICE | PowerManger | 電源的服務(wù) |
ALARM_SERVICE | AlarmManager | 鬧鐘的服務(wù) |
NOTIFICATION_SERVICE | NotificationManager | 狀態(tài)欄的服務(wù) |
KEYGUARD_SERVICE | KeyguardManager | 鍵盤(pán)鎖的服務(wù) |
LOCATION_SERVICE | LocationManager | 位置的服務(wù),如GPS |
SEARCH_SERVICE | SearchManager | 搜索的服務(wù) |
VEBRATOR_SERVICE | Vebrator | 手機(jī)震動(dòng)的服務(wù) |
CONNECTIVITY_SERVICE | Connectivity | 網(wǎng)絡(luò)連接的服務(wù) |
WIFI_SERVICE | WifiManager | Wi-Fi服務(wù) |
TELEPHONY_SERVICE | TeleponyManager | 電話服務(wù) |
inflate 方法
通過(guò) sdk 的 api 文檔,可以知道該方法有以下幾種過(guò)載形式,返回值均是 View 對(duì)象,如下:
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);// error EditText editText = (EditText)view.findViewById(R.id.content);
對(duì)于上面代碼,指定了第二個(gè)參數(shù) ViewGroup root,當(dāng)然你也可以設(shè)置為 null 值。
注意:
·inflate 方法與 findViewById 方法不同;
·inflater 是用來(lái)找 res/layout 下的 xml 布局文件,并且實(shí)例化;
·findViewById() 是找具體 xml 布局文件中的具體 widget 控件(如:Button、TextView 等)。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
android項(xiàng)目從Eclipse遷移到Android studio中常見(jiàn)問(wèn)題解決方法
android項(xiàng)目從Eclipse遷移到Android studio中經(jīng)常會(huì)遇到一些問(wèn)題,本文提供了Android studio使用中常見(jiàn)問(wèn)題解決方法2018-03-03Android ViewPager實(shí)現(xiàn)智能無(wú)限循環(huán)滾動(dòng)回繞效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)智能無(wú)限循環(huán)滾動(dòng)回繞效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07完美解決Android客戶端RSA解密部分亂碼的問(wèn)題
下面小編就為大家分享一篇完美解決Android客戶端RSA解密部分亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Android4.1中BinderService用法實(shí)例分析
這篇文章主要介紹了Android4.1中BinderService用法,以實(shí)例形式分析了Android4.1新增BinderService類(lèi)的功能、原理及使用技巧,具有一定參考借鑒價(jià)值2015-10-10Flutter 快速實(shí)現(xiàn)聊天會(huì)話列表效果示例詳解
這篇文章主要為大家介紹了Flutter 快速實(shí)現(xiàn)聊天會(huì)話列表效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Android Handler 原理分析及實(shí)例代碼
這篇文章主要介紹了Android Handler 原理分析及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Android端“被擠下線”功能的單點(diǎn)登錄實(shí)現(xiàn)
本篇文章主要介紹了Android端“被擠下線”功能的單點(diǎn)登錄實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Android camera實(shí)時(shí)預(yù)覽 實(shí)時(shí)處理,人臉識(shí)別示例
本篇文章主要介紹了Android camera實(shí)時(shí)預(yù)覽 實(shí)時(shí)處理,面部認(rèn)證示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01