如何使用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);
}
}