動態獲取view布局檔案

2021-06-25 15:02:44 字數 1608 閱讀 5307

通俗的說,inflate就相當於將乙個xml中定義的布局找出來.

因為在乙個activity裡如果直接用findviewbyid()的話,對應的是setconentview()的那個layout裡的元件.

注意與findviewbyid()的區別,inflate是載入乙個布局檔案,而findviewbyid則是從布局檔案中查詢乙個控制項。

動態獲取的四種方式如下:

inflate(int resource, viewgroup root)

resource:需要載入布局檔案的id,意思是需要將這個布局檔案中載入到activity中來操作。

root:需要附加到resource資源檔案的根控制項,什麼意思呢,就是inflate()會返回乙個view物件,

如果第三個引數attachtoroot為true,就將這個root作為根物件返回,

否則僅僅將這個root物件的layoutparams屬性附加到resource物件的根布局物件上,

也就是布局檔案resource的最外層的view上,比如是乙個linearlayout或者其它的layout物件。

layoutinflater inflater=(layoutinflater)context.getsystemservice(context.layout_inflater_service);

view layout = inflater.inflate(r.layout.main, null);

layoutinflater inflater = layoutinflater.from(context); (該方法實質就是第一種方法,可參考源**)

view layout = inflater.inflate(r.layout.main, null);

layoutinflater inflater = getlayoutinflater();(在activity中可以使用,實際上是view子類下window的乙個函式)

view layout = inflater.inflate(r.layout.main, null);

view view=view.inflate(this,r.layout.dialog_layout,null);

textviewdialogtv=(textview)view.findviewbyid(r.id.dialog_tv);

區別:setcontentview()一旦呼叫, layout就會立刻顯示ui;而inflate只會把layout形成乙個以view類實現成的物件,

有需要時再用setcontentview(view)顯示出來。一般在activity中通過setcontentview()將介面顯示出來,

但是如果在非activity中如何對控制項布局設定操作了,這就需要layoutinflater動態載入。

public view inflate(int resourece,viewgroup root)

作用:填充乙個新的檢視層次結構從指定的xml資源檔案中

resource:view的layout的id

root: 生成的層次結構的根檢視

return 填充的層次結構的根檢視。如果引數root提供了,那麼root就是根檢視;否則填充的xml檔案的根就是根檢視。

其餘幾個過載的inflate函式類似。

動態獲取View的高度

設定動態復view的高度寬度有以下兩制種方法 1.getheight 方法這個方法必須要在view呼叫了onlayout方法後才能獲得,為了監聽onlayout方法,可以獲得viewtree觀察者上的 來實現,具體 為 viewtreeobserver viewtreeobserver bottom...

獲取當前View

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

動態新增view

前面說的都是用的inte ce builder來編輯.xib檔案來給視窗新增各種控制項以及給控制項繫結資料 iboutlet 關聯事件響應函式 ibaction 這章學習的是動態的新增view,不使用inte ce builder。這裡用label和button示例 找到新建工程 viewcontr...