通俗的說,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...