1. 程式人生 > >自己對LayoutInflater理解

自己對LayoutInflater理解

  今天研究了一下LayoutInflater,發現之前的知識太薄弱,所以寫了這一篇文章來記錄下這些知識點,方便以後鞏固

1.首先獲取LayoutInflater例項有兩種方法 

第一種 

LayoutInflater inflater=LayoutInflater.from(context);

第二種

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

其實第二種方法就是第一種方法的簡略形式

2.研究LayoutInflater主要還是來找到你要的View,通過呼叫inflater來獲得

View myview=LayoutInflater.from(MainActivity.this).inflate(int resource,ViewGroup root,boolean attachToRoot);

3.講解下inflate方法的三個引數

第一個引數不用說,就是你要找到的那個View

第二個引數就是要不要給這個View設定父佈局,如果為null,這個View的layout屬性會失效,如layout_width

第三個引數就是如果你設定了父佈局root,true會執行addview方法,將這個resource新增到root中,否則只會設定resource的layout屬性,不會做別的

4.這樣就要問了為什麼activity_main佈局沒有父佈局但是layout屬性會生效呢

    因為在MainActivity.java的setConentView()方法中Android系統會自動生成一個FrameLayout,然後將activity_main.xml新增進去,所以layout屬性會生效

    測試程式碼:

    LinearLayout mainLayout = (LinearLayout) findViewById(R.id.lin1);

    ViewParent parent=mainLayout.getParent();
     Log.e("TAG", "The parent of mainlayout is "+parent);