LayoutInflater類簡單使用

2021-07-10 21:50:50 字數 2752 閱讀 2607

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)

可以看出它其實是呼叫 layoutinflater.from(context)。

layoutinflater.from(context):

public static layoutinflater from(context context)

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);// error 

edittext edittext = (edittext)view.findviewbyid(r.id.content);

對於上面**,指定了第二個引數 viewgroup root,當然你也可以設定為 null 值。

注意:·inflate 方法與 findviewbyid 方法不同;

·inflater 是用來找 res/layout 下的 xml 布局檔案,並且例項化;

·findviewbyid() 是找具體 xml 布局檔案中的具體 widget 控制項(如:button、textview 等)。

常見的LayoutInflater類

抽象類layoutinflater,其作用類似於findviewbyid 方法。不過它是用來找res layout下的xml布局檔案,並且例項化 而findviewbyid 方法僅僅是通過控制項id查詢某xml布局檔案下具體widget控制項 如button textview等 兩者具體用途 1.對...

LayoutInflater類的作用與用法

在實際開發會用到layoutinflater這個類,它的作用類似於 findviewbyid layoutinflater是用來找layout下xml布局檔案,並且例項化,而findviewbyid 是找具體xml下的具體 widget控制項 如 button,textview等 對於乙個沒有被載入...

獲取LayoutInflater例項

在實際開發中layoutinflater這個類還是非常有用的,它的作用類似於findviewbyid 不同點是layoutinflater是用來找res layout 下的xml布局檔案,並且例項化 而findviewbyid 是找xml布局檔案下的具體widget控制項 如button textv...