setContentView() 、LayoutInflater的區別

1、setContentView() 、LayoutInflater二者通常在用法上的區別:
setContentView的用法
setContentView(int layoutResID)eg , setContentView(R.layout.main) 這個事初學的時候通常在onCreate方法裏用到

setContentView(View view)    //就是放一個view對象的參數

setContentView(View view, ViewGroup.LayoutParams params)   //這種暫時還沒有試過


LayoutInflater用法

LayoutInflater inflater = getLayoutInflater()//調用activity的getLayoutInflater()方法獲得一個LayoutInflater

LayoutInflater localinflater = getSystemService(String nameater = getSystemService(String name)  //也是調用activity中的getSystemService方法,所用的參數也是內置的,可根據需要選擇 eg , getSystemService(Context.Layout_INFLATER_SERVICE);

LayoutInflater inflater = LayoutInflater.from(context);   //eg , LayoutInflater.from(this);   

注:這三種獲得LayoutInflater 的方式,本質其實是相同的,從源碼中能夠看出它們都是調用getSystemService()方法。


2、setContentView() 、LayoutInflater二者在Activity中使用的狀態:
初學Android的時候,大家都知道我們在emulater上運行我們的android應用時就會有一個界面顯示在模擬器上,而這裏面就是我們在繼承的Activity類中,重寫的一個onCreate方法裏使用了setContentView方法,把layout文件夾裏面的佈局文件(xml文件)設置進去,這樣,我們在模擬器上就可以看到我們自己定義的andriod ui.
這裏要詳細介紹一下LayoutInflater:我們用LayoutInflater一般都是想要把一個沒有被載入,或者想要動態載入的界面顯示出來,在一個繼承Activity基類的class中可以通過setContentView將界面顯示出來,但在非繼承於Activity的類中就需要LayoutInflater來Inflater了。所謂被載入和沒有被載入區別在於,比如,當我們啓動一個應用時,與入口Activity相關的layout就是被載入(啓動應用時第一個顯示在屏幕上的界面,通常就是main.xml);而其他的layout則是沒有被載入的,這時就要動態載入或通過跳轉到另一個activity.使用LayoutInflater可以得到項目中 layout文件夾下的某個xml佈局文件,然後將該文件轉化爲View類型,有需要時再用setContentView(view)顯示出來(一直不是很明白這樣再顯示出來有什麼意義???). LayoutInflater可以與findViewById相比,只不過findViewById得到的是xml佈局文件中某個具體的widget控件,如TextView/EditText/Button.....等一些界面元素
個人理解:如果我們的activity類不繼承Activity基類,則就要通過LayoutInflater來加載界面;而如果activity類繼承了Activity類,這時既可以用setContentView()來顯示界面,也可以用Inflater加載界面。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章