1. 程式人生 > >LayoutInflater inflate方法的使用

LayoutInflater inflate方法的使用

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

demo下載
更加全面、正確的資訊請參考以下兩位大神部落格
推薦部落格1
推薦部落格2