LayoutInflater inflate方法的使用
阿新 • • 發佈:2018-12-27
如何使用LayoutInflater inflate為容器新增xml佈局
Demo下載
下圖是android 官方文件對inflate的解釋
從指定的xml資源中擴充套件新的檢視層次結構。我們通過使用的是三引數inflate
activity_main.xml
建立主佈局activity_main,三個LinearLayout分別用於第三個引數true,flase和第二引數null的使用
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.inflate.MainActivity" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/main_ll" android:background="@color/colorAccent"> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/main_ll2" android:background="@color/colorAccent"> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/main_ll3" android:background="@color/colorAccent"> </LinearLayout> </LinearLayout>
ly.xml
建立ly.xml檔案,這個佈局檔案就是新增到activity_main佈局中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll" android:layout_width="200dp" android:layout_height="200dp" android:background="@color/colorPrimary" android:gravity="center" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name"/> </LinearLayout>
MainActivity.java
當第三個引數為true時,會自動將第一個引數所指定的View新增到第二個引數所指定的View中。
當第三個引數為false時,表示不將第一個引數所指定的View新增到root中
當root為null表示我不需要將第一個引數所指定的佈局新增到任何容器中,同時也表示沒有任何容器來來協助第一個引數所指定佈局的根節點生成佈局引數
package com.example.administrator.inflate; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { LinearLayout ll; LinearLayout ll2; LinearLayout ll3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ll=(LinearLayout)findViewById(R.id.main_ll); ll2=(LinearLayout)findViewById(R.id.main_ll2); ll3=(LinearLayout)findViewById(R.id.main_ll3); View view=LayoutInflater.from(this).inflate(R.layout.ly,ll,true);//第三個引數為TRUE View view2=LayoutInflater.from(this).inflate(R.layout.ly,ll2,false);//第三個引數為FALSE 如果引數為true則報錯,不主動新增到root中 View View3=LayoutInflater.from(this).inflate(R.layout.ly,null,false);//第二個引數為null,它的根節點的寬高屬性會失效 ll2.addView(view2); ll3.addView(View3); } }