android inflater 用法


在實際開發中LayoutInflater這個類還是非常有用的,它的作用類似於findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局文件,並且實例化;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)。 具體作用: 1、對於一個沒有被載入或者想要動態載入的界面,都需要使用LayoutInflater.inflate()來載入;

2、對於一個已經載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。

LayoutInflater 是一個抽象類,在文檔中如下聲明:

publicabstractclass LayoutInflater extends Object 

 

獲得 LayoutInflater 實例的三種方式

1.LayoutInflater inflater = getLayoutInflater();  //調用Activity的getLayoutInflater()

2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService

                                                (Context.LAYOUT_INFLATER_SERVICE);

3. LayoutInflater inflater = LayoutInflater.from(context);  

 

其實,這三種方式本質是相同的,從源碼中可以看出:

getLayoutInflater():

Activity 的 getLayoutInflater() 方法是調用 PhoneWindow 的getLayoutInflater()方法,看一下該源代碼:

 

public PhoneWindow(Context context) {          super(context);          mLayoutInflater = LayoutInflater.from(context);  } 

可以看出它其實是調用 LayoutInflater.from(context)。

 

LayoutInflater.from(context):

publicstatic LayoutInflater from(Context context) {       LayoutInflater LayoutInflater =               (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);       if (LayoutInflater == null) {           thrownew AssertionError("LayoutInflater not found.");       }       return LayoutInflater;   }

可以看出它其實調用 context.getSystemService()。

 

結論:所以這三種方式最終本質是都是調用的Context.getSystemService()。

 

inflate 方法 通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式,返回值均是 View 對象,如下:

 

public View inflate (int resource, ViewGroup root)  public View inflate (XmlPullParser parser, ViewGroup root)    public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)    public View inflate (int resource, ViewGroup root, boolean attachToRoot) 

示意代碼:

 

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);    View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));    //EditText editText = (EditText)findViewById(R.id.content);// error  EditText editText = (EditText)view.findViewById(R.id.content); 

對於上面代碼,指定了第二個參數 ViewGroup root,當然你也可以設置為 null 值。

注意:

·inflate方法與 findViewById 方法不同;

·inflater 是用來找 res/layout下的 xml 布局文件,並且實例化;

·findViewById() 是找具體 xml 布局文件中的具體 widget 控件(如:Button、TextView 等)。

 

來源:http://blog.sina.com.cn/s/blog_48a45b950100u8ax.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM