tags: APP
Android
Common 簡要說明
- 首先要知道,什麼是已經被載入的 Layout ,什麼是還沒有載入的
- 啟動一個應用,與入口 Activity 相關的 Layout (常見的是activity_main.xml)就是被載入的,即在
onCreate()
中的。 - 而其他的 Layout 是沒有被載入的,就要透過動態載入了或透過另一個 Activity 來載入
LayoutInflater 簡介
作用
- 作用類似於
findViewById()
:xml佈局檔下的具體widget控制項(如 Button、TextView…) - 而 LayoutInflater 是用來找
res/layout/
下的 xml 佈局檔,並且實例化 - 簡單來說:
- 對於一個沒有被載入或者想要動態載入的頁面,要使用
LayoutInflater.inflate()
來載入 - 對於一個已經載入Activity的就會使用findViewById來載入介面元素
- 對於一個沒有被載入或者想要動態載入的頁面,要使用
使用方法
- 一般都是在Activity中的onCreate()中利用setContentView來載入xml定義好的介面
getSystemService(Context.LAYOUT_INFLATER_SERVICE)
方法可以獲得一個 LayoutInflater- 透過
LayoutInflater inflater = getLayoutInflater()
,並使用inflate的方法來載入Layout
Code 程式碼
- 以下3種code都是同樣的功能:
LayoutInflater inflater = getLayoutInflater();
LayoutInflater localinflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = LayoutInflater.from(context);
LayoutInflater 的 method
inflate(int resource, ViewGroup root)
- resource:Layout 的 ID,例如:
R.layout.example
- root:該Layout的外部再嵌套一層parent Layout,如果不需要就直接填
null
- resource:Layout 的 ID,例如:
inflate(int resource, ViewGroup root, boolean attachToRoot)
- 若root為
null
,attachToRoot設置任何值都沒有意義 - 若root不為
null
,attachToRoot設為true
,則會給加載的佈局文件的指定一個parent Layout - 若root不為
null
,attachToRoot設為false
,則會將佈局文件最外層的所有Layout屬性進行設置,當該view被添加到parent view當中時,這些Layout屬性會自動生效
- 若root為
Example 範例:
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.example, parent, false);
Reference 參考資料
- LayoutInflater作用及使用:
http://corun2012.pixnet.net/blog/post/63282226-layoutinflater作用及使用 - Android LayoutInflater的使用:
http://fecbob.pixnet.net/blog/post/39253775-android-layoutinflater的使用 - LayoutInflater 官方文件:https://developer.android.com/reference/android/view/LayoutInflater.html
- Android LayoutInflater原理分析,带你一步步深入了解View(一):https://blog.csdn.net/guolin_blog/article/details/12921889
沒有留言:
張貼留言