本節(jié)課繼續(xù)講Android中的資源文件-layout資源,一個(gè)界面的誕生離不開布局,我們Android開發(fā)者的大部分工作都是在搭建UI,一個(gè)產(chǎn)品的誕生,首先是由產(chǎn)品經(jīng)理出線框圖,再由設(shè)計(jì)師出視覺稿和標(biāo)注圖,然后我們開發(fā)人員才會(huì)根據(jù)標(biāo)注圖來搭建界面。本節(jié)課就來給大家簡單介紹一下我們要用到的布局資源,先來看AS中布局資源長什么樣子,如下圖所示:
圖中的layout文件夾存放的就是我們程序中的布局文件,我們每搭一個(gè)界面都需要在layout文件夾下創(chuàng)建相應(yīng)的xml文件,然后在程序中通過以下方式引用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
我們在Activity中通過setContentView的方法,把我們的界面顯示出來。
除了這種方式,我們實(shí)際開發(fā)中可能需要?jiǎng)討B(tài)的加載布局文件,需要通過LayoutInflater這個(gè)類來找到相應(yīng)的布局文件,它就類似Activity中的findViewById的作用,只不過findViewById查找的是當(dāng)前頁面的控件,而LayoutInflater是加載布局文件中的布局文件。
獲取LayoutInflater實(shí)例有三種形式:
1. LayoutInflater inflater = getLayoutInflater();//調(diào)用Activity的getLayoutInflater()
2. LayoutInflater inflater = LayoutInflater.from(context);
3. LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
獲取到LayoutInflater實(shí)例對象之后,調(diào)用其inflate方法來動(dòng)態(tài)加載布局。
我們用得比較多的是以下兩個(gè)方法
public View inflate (int resource, ViewGroup root)
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
eg:
LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout view = (LinearLayout) inflater.inflate(R.layout.layout_inflate, null);
通過以上這種方式就可以把layout下的xml文件動(dòng)態(tài)加載出來。
這里留一個(gè)思考題給大家思考一下,上面inflate的兩種加載方法,之間的區(qū)別是什么?
這個(gè)問題剛開始接觸可能不能理解它們之間的區(qū)別,只有應(yīng)用在特定的場景才會(huì)意識到它們的區(qū)別,比如我們使用ListView的時(shí)候,需要加載item布局,使用上面兩種重載方式,并設(shè)置不同的參數(shù)都會(huì)有不同的效果
inflater.inflate(R.layout.list_item, null);
inflater.inflate(R.layout.list_item, parent, false);
inflater.inflate(R.layout.list_item, parent, true);
這個(gè)疑問我們先放著,等我們講到ListView的時(shí)候再來講這個(gè)問題,童鞋可以先想一想,自己百度一下,看是否能找到答案。