LayoutInflater和inflate()方法的用法

LayoutInflater做用是將layoutxml佈局文件實例化爲View類對象。函數

實現LayoutInflater的實例化共有3種方法,佈局

(1).經過SystemService得到spa

    LayoutInflaterinflater = (LayoutInflater)context.getSystemServices(Context.LAYOUT_INFLATER_SERVICES);code

    Viewview = inflater.inflate(R.layout.main, null);orm

(2).從給定的context中得到xml

    LayoutInflaterinflater = LayoutInflater.from(context);對象

    Viewview = inflater.inflate(R.layout.mian, null);資源

(3).get

    LayoutInflaterinflater =getLayoutInflater();(在Activity中能夠使用,其實是View子類下window的一個函數)源碼

    Viewlayout = inflater.inflate(R.layout.main, null);


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

getLayoutInflater()

ActivitygetLayoutInflater()方法是調用PhoneWindowgetLayoutInflater()方法,看一下該源代碼:

    publicPhoneWindow(Contextcontext) {

        super(context);

        mLayoutInflater= LayoutInflater.from(context);

    }

能夠看出它實際上是調用LayoutInflater.from(context)

LayoutInflater.from(context)

    public static LayoutInflaterfrom(Context context) {

        LayoutInflaterLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if(LayoutInflater== null){

            thrownew AssertionError("LayoutInflaternot found.");

        }

        returnLayoutInflater;

    }

能夠看出它其實調用context.getSystemService()


 

public View inflate(int Resourece,ViewGrouproot)
做用:填充一個新的視圖層次結構從指定的XML資源文件中
reSource
ViewlayoutID
root
: 生成的層次結構的根視圖
return 
填充的層次結構的根視圖。若是參數root提供了,那麼root就是根視圖;不然填充的XML文件的根就是根視圖。

其他幾個重載的inflate函數相似。

相關文章
相關標籤/搜索