Android的LayoutInflater

在 实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用 来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;

2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。

LayoutInflater 是一个抽象类,在文档中如下声明:

publicabstractclass LayoutInflater extends Object

获得 LayoutInflater 实例的三种方式

1.LayoutInflater inflater = getLayoutInflater();  //调用Activity的getLayoutInflater()

2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService

(Context.LAYOUT_INFLATER_SERVICE);

3. LayoutInflater inflater = LayoutInflater.from(context);

其实,这三种方式本质是相同的,从源码中可以看出:这三种方式最终本质是都是调用的Context.getSystemService()。

下面是一个Demo

  1. main.xml
  2. <?xml version="1.0"
  3. encoding="utf-8"?>
  4. <LinearLayout
  5. xmlns:android="http://schemas.android.com/apk/res/android"
  6. android:orientation="vertical"
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. >
  10. <TextView
  11. android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"
  13. android:text="@string/hello"
  14. />
  15. <Button
  16. android:id="@+id/button"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:text="ShowCustomDialog"
  20. />
  21. </LinearLayout>

复制代码

定义对话框的布局方式custom_dialog.xml

  1. <?xml version="1.0"
  2. encoding="utf-8"?>
  3. <LinearLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. android:orientation="horizontal"
  6. android:layout_width="fill_parent"
  7. android:layout_height="fill_parent"
  8. android:padding="10dp"
  9. >
  10. <ImageView android:id="@+id/image"
  11. android:layout_width="wrap_content"
  12. android:layout_height="fill_parent"
  13. android:layout_marginRight="10dp"
  14. />
  15. <TextView android:id="@+id/text"
  16. android:layout_width="wrap_content"
  17. android:layout_height="fill_parent"
  18. android:textColor="#FFF"
  19. />
  20. </LinearLayout>

复制代码

Activity代码

  1. package com.android.tutor;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.Context;
  5. import android.os.Bundle;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. import android.widget.ImageView;
  11. import android.widget.TextView;
  12. public class LayoutInflaterDemo extends Activity implements
  13. OnClickListener {
  14. private Button button;
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. button = (Button)findViewById(R.id.button);
  19. button.setOnClickListener(this);
  20. }
  21. @Override
  22. public void onClick(View v) {
  23. showCustomDialog();
  24. }
  25. public void showCustomDialog()
  26. {
  27. AlertDialog.Builder builder;
  28. AlertDialog alertDialog;
  29. Context mContext = LayoutInflaterDemo.this;
  30. //下面俩种方法都可以
  31. //LayoutInflater inflater = getLayoutInflater();
  32. LayoutInflater inflater = (LayoutInflater)   mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
  33. View layout = inflater.inflate(R.layout.custom_dialog,null);  //返回值为view
  34. TextView text = (TextView) layout.findViewById(R.id.text);
  35. text.setText("Hello, Welcome to Mr Wei‘s blog!");
  36. ImageView image = (ImageView) layout.findViewById(R.id.image);
  37. image.setImageResource(R.drawable.icon);
  38. builder = new AlertDialog.Builder(mContext);
  39. builder.setView(layout);
  40. alertDialog = builder.create();
  41. alertDialog.show();
  42. }
  43. }

复制代码

运行效果:

时间: 2024-10-07 06:28:07

Android的LayoutInflater的相关文章

Android中LayoutInflater的使用

Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等). 获取它的用法有3种: 方法1: 由LayoutInflater的静态函数:from(Context context) 获取: static 

Android获取LayoutInflater对象的方法总结

在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View.本文主要目的是总结获取LayoutInflater对象的方法. 1.若能获取context对象,可以有以下几种方法: LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View child = inflater.inflate(R.la

at android.view.LayoutInflater.createViewFromTag的错误原因

创建对话框时出现下面的错误: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference                                                                                 

Android高手进阶教程(五)之----Android 中LayoutInflater的使用!

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weizhulin.blog.51cto.com/1556324/311450 大家好我们这一节讲的是LayoutInflater的使用,在实际开发种LayoutInflater这个类还是非常有用的,它的作用类似于 findViewById(), 不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化!而findViewById()是找具体xml下的

Android中LayoutInflater实例

LayoutInflater与findViewById的用法有很多可比较之处. 如:他们都可以通过id返回View. LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.custom_dialog,null); Button button = (Button) findViewById(R.id.button); 不同之处是:LayoutInflater是用来实例化整个布局文

Android之LayoutInflater三种方式分析

获取LayoutInflater有三种不同的方式,那么这三种方式有什么区别呢? 源码: ① LayoutInflater inflater = LayoutInflater.from(context);  (LayoutInflater类) <span style="font-size:14px;">public static LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (La

Android 中LayoutInflater原理分析

概述 在Android开发中LayoutInflater的应用非常普遍,可以将res/layout/下的xml布局文件,实例化为一个View或者ViewGroup的控件.与findViewById的作用类似,但是findViewById在xml布局文件中查找具体的控件,两者并不完全相同. 应用场景: 1.在一个没有载入或者想要动态载入的界面中,需要使用layoutInflater.inflate()来载入布局文件: 2.对于一个已经载入的界面,就可以使用findViewById方法来获得其中的界

Android 中 LayoutInflater 的使用

一.LayoutInflater 的作用 我们一般使用 LayoutInflater 做一件事:View inflate(int resource, ViewGroup root); inflate() 的作用类似于 findViewById(); 不同的是 findViewById 用于查找某一具体 XML 下的具体的 widget 控件(如 TextView,Button 等待)而 inflate 则用于查找 /res/layout/文件夹下的 XML 布局文件并实例化,与 setConte

【android】LayoutInflater.inflate方法的详解及xml根元素的布局参数不起作用的问题

一.首先看带三个参数的inflate方法: public View inflate (int resource, ViewGroup root, boolean attachToRoot) 1.如果root不为null,且attachToRoot为TRUE,则会在加载的布局文件的最外层再嵌套一层root布局,这时候xml根元素的布局参数当然会起作用. 2.如果root不为null,且attachToRoot为false,则不会在加载的布局文件的最外层再嵌套一层root布局,这个root只会用于为