`

android中LayoutInflater的使用(转)

阅读更多
Inflater英文意思是膨胀,在android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
她可以有很多地方可以使用,如BaseAdapter的getView中,自定义Dialog中取得view中的组件widget等等。
它的用法有2种:
Java代码
LayoutInflater inflater = LayoutInflater.from(this);   
View view=inflater.inflate(R.layout.ID, null); 

或者干脆并成一句: 
View view=LayoutInflater.from(this).inflate(R.layout.ID, null);  
LayoutInflater inflater = LayoutInflater.from(this);
View view=inflater.inflate(R.layout.ID, null);

或者干脆并成一句:
View view=LayoutInflater.from(this).inflate(R.layout.ID, null);

另一种方法:
Java代码
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);  
View view=inflater.inflate(R.layout.ID, null);  
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.ID, null);

上面2种方法本质上是一样的,看下面的源码,form()调用的就是getSystemService():
Java代码
public static LayoutInflater from(Context context) {     
    LayoutInflater LayoutInflater =     
            (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     
    if (LayoutInflater == null) {     
        throw new AssertionError("LayoutInflater not found.");     
    }     
    return LayoutInflater;     
}   
public static LayoutInflater from(Context context) {  
    LayoutInflater LayoutInflater =  
            (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
    if (LayoutInflater == null) {  
        throw new AssertionError("LayoutInflater not found.");  
    }  
    return LayoutInflater;  
}

另外getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
传入的Name返回的对象说明
WINDOW_SERVICE  WindowManager  管理打开的窗口程序
LAYOUT_INFLATER_SERVICE  LayoutInflater  取得xml里定义的view
ACTIVITY_SERVICE  ActivityManager  管理应用程序的系统状态
POWER_SERVICE PowerManger  电源的服务
ALARM_SERVICE  AlarmManager  闹钟的服务
NOTIFICATION_SERVICE  NotificationManager  状态栏的服务
KEYGUARD_SERVICE  KeyguardManager  键盘锁的服务
LOCATION_SERVICE  LocationManager  位置的服务,如GPS
SEARCH_SERVICE  SearchManager  搜索的服务
VEBRATOR_SERVICE  Vebrator  手机震动的服务
CONNECTIVITY_SERVICE  Connectivity  网络连接的服务
WIFI_SERVICE  WifiManager  Wi-Fi服务
TELEPHONY_SERVICE  TeleponyManager  电话服务
Java代码
//基本用法 
public void showCustomDialog(){  
  AlertDialog.Builder builder;  
  AlertDialog alertDialog;  
  Context mContext = AppActivity.this;  
//下面俩种方法都可以  
  //LayoutInflater inflater = getLayoutInflater();  
  LayoutInflater inflater = (LayoutInflater)   
mContext.getSystemService(LAYOUT_INFLATER_SERVICE);  
  View layout = inflater.inflate(R.layout.custom_dialog,null);  
  TextView text = (TextView) layout.findViewById(R.id.text);  
  text.setText("Hello, Welcome to Mr Wei's blog!");  
  ImageView image = (ImageView) layout.findViewById(R.id.image);  
  image.setImageResource(R.drawable.icon);  
  builder = new AlertDialog.Builder(mContext);  
  builder.setView(layout);  
  alertDialog = builder.create();  
  alertDialog.show();  
 }  
}  
protected void showToast(int type) {    
        Toast.makeText(this, "*********", Toast.LENGTH_LONG).show();    
        LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
        View view = li.inflate(R.layout.toast, null);    
        Toast toast = new Toast(this);    
        toast.setView(view);    
        toast.setDuration(type);    
        toast.show();    
    }    
分享到:
评论

相关推荐

    Android 中LayoutInflater的使用

    在Android开发中,LayoutInflater是一个非常关键的工具,它主要用于将XML布局文件转换为视图对象。这个过程称为“实例化”或“.inflate”。通过LayoutInflater,我们可以动态地在运行时加载和插入用户界面元素,这...

    android中LayoutInflater的使用.pdf

    在Android开发中,`LayoutInflater` 是一个至关重要的工具,它负责将XML布局文件转换为视图对象(View objects)。这个过程被称为布局的“实例化”或“膨胀”。`LayoutInflater` 提供了一种灵活的方式来动态地加载和...

    Android 中级应用 一 LayoutInflater 的使用

    5. **自定义视图**:开发者还可以创建自己的视图类,然后在XML布局中使用。在这种情况下,`LayoutInflater`会调用自定义视图的`inflate()`方法,让开发者有机会在加载时进行额外的初始化工作。 6. **性能优化**:...

    Aj_04的Android 中LayoutInflater的使用(源码)

    测试:Android 中LayoutInflater的使用 注意:Aj_04是用了调用另外一个界面,要注意调用的方法, 还一定还要在AndroidManifest.xml 中加上呢句:<activity android:name="LayoutInflaterDemo"></activity>

    Android LayoutInflater的用法

    用于创建一个新的`LayoutInflater`实例,该实例具有与原始实例相同的布局工厂和标签前缀,但其上下文被替换为指定的新上下文,这对于处理多线程或在不同上下文中使用`LayoutInflater`非常有用。 源码分析方面,`...

    Android 中LayoutInflater(布局加载器)之实战篇Demo

    Android 中LayoutInflater(布局加载器)之实战篇 博客的Demo 博客地址: http://blog.csdn.net/l540675759/article/details/78112989 两种方式实现小红书的引导页: (1)自定义View (2)自定义LayoutInflater....

    Android LayoutInflater加载布局详解及实例代码

    在Android应用开发中,我们通常使用LayoutInflater来动态地加载和插入布局,这在创建自定义视图、处理动态数据或者在运行时创建视图时非常有用。本文将深入解析LayoutInflater的工作原理,并提供实例代码来帮助理解...

    layoutinflater中嵌套layoutinflater

    标题提到的"layoutinflater中嵌套layoutinflater"涉及到的是在一个布局中使用`LayoutInflater`来加载另一个包含`LayoutInflater`的布局结构。这种操作通常出现在自定义复杂的可重用组件或者需要动态加载子视图的场景...

    Android LayoutInflater深入分析及应用

    arser.START_TAG && type != XmlPullParser.END_DOCUMENT) { // Do nothing } if (type != XmlPullParser.START_TAG) { throw new InflateException(parser.getPositionDescription() + ": No start tag found!...

    LayoutInflater inflate 示例demo

    总的来说,这个"LayoutInflater inflate 示例demo"是一个很好的学习资源,它将帮助你深入理解Android中布局动态加载的过程,以及如何根据需要有效地使用`LayoutInflater`。通过实践,你将能够熟练掌握这一关键的...

    Android LayoutInflater.Factory主题切换

    首先,我们需要理解`LayoutInflater`在Android中的角色。`LayoutInflater`是负责将XML布局文件转换为视图对象(View)的关键类。它从资源文件中读取布局描述,并根据描述创建对应的View实例。通过`LayoutInflater`,...

    Android 中LayoutInflater.inflate()方法的介绍

    该方法是LayoutInflater类中的一个成员方法,主要用于将XML布局文件转换成View对象,以便在Android应用程序中使用。 LayoutInflater.inflate()方法的基本用法 LayoutInflater对象的实例可以通过LayoutInflater.from...

    down-test-Android 获得 LayoutInflater 实例的三种方式

    down-test-Android 获得 LayoutInflater 实例的三种方式

    Android开发实现自定义Toast、LayoutInflater使用其他布局示例

    Android开发实现自定义Toast、LayoutInflater使用其他布局是 Android 应用程序开发中非常重要的一部分。 Toast 是 Android 应用程序中最常用的提示信息机制,它可以在程序中弹出提示信息,提醒用户某些操作的结果或...

    Android中使用LayoutInflater要注意的一些坑

    而在Fragment中,你可能在onCreateView()中使用LayoutInflater,但`attachToRoot`通常设为false,因为你可能希望在onActivityCreated()中控制何时将视图添加到Fragment的视图层次结构中。 总之,理解和正确使用...

    基于Android LayoutInflater的使用介绍

    在android中,LayoutInflater有点类似于Activity的findViewById(id),不同的是LayoutInflater是用来找layout下的xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。...

    Android中LayoutInflater.inflater()的正确打开方式

    Android中LayoutInflater.inflater()的正确打开方式 LayoutInflater是Android中用于加载布局文件的核心类,通过LayoutInflater的inflate()方法可以将布局文件加载到内存中,并返回对应的View对象。但是,很多开发者...

Global site tag (gtag.js) - Google Analytics