LayoutInflater做用是將layout的xml佈局文件實例化爲View類對象。小程序
獲取LayoutInflater的方法有以下三種:函數
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
佈局
View layout = inflater.inflate(R.layout.main,
null
);
this
LayoutInflater inflater = LayoutInflater.from(context); (該方法實質就是第一種方法,可參考源代碼)
spa
View layout = inflater.inflate(R.layout.main,
null
);
code
LayoutInflater inflater = getLayoutInflater();(在Activity中能夠使用,其實是View子類下window的一個函數)
orm
View layout = inflater.inflate(R.layout.main,
null
);
xml
一直有點糾結setContentView和inflate的區別找了一些資料。寫了個小程序看了下:對象
public
class
MyInflate
extends
Activity{
資源
private
TextView tv;
public
void
OnCreate(Bundle savedInstanceState){
super
.onCreate(savedInstanceState);
//setContentView(R.layout.main);
//tv = (TextView) findViewById(R.id.tv);
LayoutInflater inflate = LayoutInflater.from(
this
);
View view = inflate.inflate(R.layout.main,
null
);
setContentView(view);
}
}
上述註釋掉的代碼和沒有註釋掉的代碼兩種狀況是相同的。
區別:
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函數相似。