Android之Inflate()方法用途
flate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能。最近做的一个项目就是这一点让我迷茫了好几天。
Android上还有一个与Inflate()类似功能的方法叫findViewById(),二者有时均可使用,但也有区别
区别在于:
如果你的Activity里用到别的layout,比如对话框layout,你还要设置这个layout上的其他组件的内容,你就必须用inflate()方法先将对话框的layout找出来,然后再用findViewById()找到它上面的其它组件。例如:
View view1=View.inflate(this,R.layout.dialog_layout,null); TextViewdialogTV=(TextView)view1.findViewById(R.id.dialog_tv); dialogTV.setText("abcd");
View view1=View.inflate(this,R.layout.dialog_layout,null);
TextViewdialogTV=(TextView)view1.findViewById(R.id.dialog_tv);
dialogTV.setText("abcd");
LayoutInflater和inflate的用法:
package cn.csdn.activity; import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.TabHost; public class TabHostActivity extends TabActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TabHost tabhost = this.getTabHost(); /** * LayoutInflater这个类的作用类似于findViewById(), * 不同点: * LayoutInflater是用来找layout下xml布局文件的,而且它会实例化 * findViewById()是找具体xml布局文件下的具体widget控件,比如:Button按钮 * * * * inflate就相当于将一个xml中定义的布局找出来. * 因为如果在一个Activity文件里直接用findViewById()这个方法的话, * 那么它所对应的是setConentView()中调用的那个layout里的组件. * 因此如果在同样的Activity里用到别的layout的话, * 而且你还要设置这个layout里的组件(比如:ImageView,TextView)上的内容, * 那么你就必须用inflate()先将这个layout找出来, 然后再用这个layout对象去找到它上面的组件 * 然后进行一系列的操作 * * inflate()方法中参数: * 1.想要用的布局文件的id * 2.持有选项卡的内容,获取FrameLayout * 3.true:将此处解析的xml文件做为根视图View */ LayoutInflater.from(this).inflate(R.layout.tabhost_layout, tabhost.getTabContentView(), true); /**在这里添加的时候: * 1.必须指定 tab 的内容,必须为 id, 即:setContent(R.id.text) * 2.必须设置tab 上的文字或图片 , 即:setIndicator("已接电话") * 3.返回一个 TabHost.TabSpec 对象,其参数用于标识一个 tab 的 tag,即:newTabSpec("tab1") */ tabhost.addTab(tabhost.newTabSpec("tab1").setIndicator("已接电话") .setContent(R.id.text)); tabhost.addTab(tabhost.newTabSpec("tab2").setIndicator("呼出电话", getResources().getDrawable(R.drawable.ic_launcher)) .setContent(R.id.text)); tabhost.addTab(tabhost.newTabSpec("tab3").setIndicator("未接电话") .setContent(R.id.text)); }
}
一、LayoutInflater
LayoutInflater其实是在res/layout/下找到xml布局文件,并且将其实例化,这个和findViewById()有点相似,后者是找xml布局文件下的具体widget控件(如Button、TextView等)
作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
LayoutInflater 是一个抽象类,在文档中如下声明:
public abstract class LayoutInflater extends Object
获得 LayoutInflater 实例的三种方式
LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()
例:View toastRoot = getLayoutInflater().inflate(R.layout.toast, null);LayoutInflater localinflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = LayoutInflater.from(context);
例:View convertView = LayoutInflater.from(mContext).inflate(R.layout.activity_contact, null);
二、inflate
通俗的说,inflate就相当于将一个xml中定义的布局找出来.因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组件.
因此如果你的Activity里如果用到别的layout,比如对话框上的layout,你还要设置对话框上的layout里的组件(像图片ImageView,文字TextView)上的内容,你就必须用inflate()先将对话框上的layout找出来,然后再用这个layout对象去找到它上面的组件,如:
View view=View.inflate(this,R.layout.dialog_layout,null);
TextView dialogTV=(TextView)view.findViewById(R.id.dialog_tv);
dialogTV.setText(“abcd”);
如果组件R.id.dialog_tv是对话框上的组件,而你直接用this.findViewById(R.id.dialog_tv)肯定会报错.
Android之Inflate()方法用途相关推荐
- Android之Inflate()方法用途+setContentView和inflate区别
引用:http://blog.chinaunix.net/uid-27024249-id-3304935.html Android之Inflate()方法用途 Inflate()作用就是将xml定义的 ...
- Inflate()---Android之Inflate()方法用途
Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. android上还有一个与Inflate()类 ...
- Android中inflate方法的用法
Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. android上还有一个与Inflate()类 ...
- Android之 inflate() 方法总结
文章目录 一.引言 二.源码分析 2.1 源码跟踪 2.2 结论 一.引言 inflater.inflate(R.layout.layout_inflate_test,null); inflater. ...
- Android inflate方法与 findViewById 方法区别
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- 【Android 界面效果43】Android LayoutInflater的inflate方法中attachToRoot的作用
我们在ListView的Adapter的getView方法里面经常会调用两个参数的inflate方法, mInflater.inflate(R.layout.adv_viewpager, null); ...
- 带你看懂LayoutInflater中inflate方法
关于inflate问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东 ...
- Android --- View.inflate()的详细介绍
误用 LayoutInflater 的 inflate() 方法已经不是什么稀罕事儿了-- 做 Android 开发做久了,一定会或多或少地对布局的渲染有一些懵逼: 1.View.inflate() ...
- 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
本文转载自[http://blog.csdn.net/u012702547/article/details/52628453] 关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关 ...
最新文章
- “社区之星”成长故事征集
- 汇编语言介绍,内存和总线的初步认识
- Java多线程详解[狂神说Java]
- 蓝桥杯_算法训练_关联矩阵
- java与C++实现判断闰年(百练OJ:2733:判断闰年)
- fortran subroutine_Fortran:派生数组与数组传递进子程序耗费时间比较
- AlarmManager类的应用(实现闹钟功能)
- 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
- Vue is not defined;at App onLaunch function;at api getSystemInfo success callback function
- linux下刻录光盘读取不了_Linux下刻录光盘实战
- 力扣题目——997. 找到小镇的法官
- Jmeter安装TPS插件
- 小米手机访问电脑共享文件_详细方法步骤教你如何解决小米电视访问电脑共享资源!...
- vue项目接入高拍仪
- MPP架构、常见OLAP引擎分析
- 困扰了很久的ubuntu下智能拼音输入法
- PHP学习笔记——图形图像
- Apple 设备尺寸
- 图解Linux命令之--modprobe命令
- 科目三考试经验与技巧——长春长德科目三考场
热门文章
- (转载)关于IAP与APP互相跳转的实现
- 教你使用stm32接收串口的一帧数据!
- 双曲线和直线联立公式_高中圆锥曲线解题技巧之齐次化联立(四)
- python 语言教程(3)变量之字符串
- 广东省老龄化预测及影响因素分析
- python——全局变量和局部变量
- optee中添加一个中断以及底层代码的相关解读
- optee:kernel space调用user space进程时候的硬件行为
- 广西2021各校高考成绩查询入口,2021年广西高考成绩排名查询系统,广西高考位次排名查询...
- WIN10+MinGW中文输出乱码的解决方法