LayoutInflater的使用
发布日期:2021-06-30 21:21:45
浏览次数:3
分类:技术文章
本文共 2858 字,大约阅读时间需要 9 分钟。
LayoutInflater的使用
在工作中,事先写好的布局文件往往不能满足我们的需求,有时会根据情况在代码中自定义控件,这就需要用到LayoutInflater。
LayoutInflater在Android中是“扩展”的意思,作用类似于findViewById(),不同的是LayoutInflater是用来获得布局文件对象的,而findViewById()是用来获得具体控件的。LayoutInflater经常在BaseAdapter的getView方法中用到,用来获取整个View并返回。
LayoutInflater的用法有三种:第一种方法:
LayoutInflater inflater = LayoutInflater.from(this); View layout = inflater.inflate(R.layout.main, null);
第二种方法:
LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.main, null);
第三种方法:
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.main, null);
第一种方法的本质就是调用第三种方法,而第二种方法和第三种方法有什么区别,我还真不知道,有哪位知道的请留言指教啊!
下面是简单的使用示例:
public class LayoutInflaterActivity extends Activity { private EditText et; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 第一种方法 LayoutInflater inflater = LayoutInflater.from(this); view =inflater.inflate(R.layout.list_content_show,null); //inflater.inflate(R.layout.list_content_show,这里搬带上自己的父容器如果不写会丢掉宽高,flase) //如果root设为空的话根目录的宽高加会丢失 ViewGroup root 代表View即将挂载到那个跟控件下面 //public View inflate(int resource, ViewGroup root) //boolean attachToRoot 代表告诉系统谁来操作默认为true true表示系统来操作 false表示我们自己来操作 // inflater.inflate(int resource, ViewGroup root,boolean attachToRoot) View layout = inflater.inflate(R.layout.main, null); // 第二种方法 // LayoutInflater inflater = getLayoutInflater(); // View layout = inflater.inflate(R.layout.main, null); // 第三种方法 // LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); // View layout = inflater.inflate(R.layout.main, null); // 这里是通过事先获得的布局文件来实例化具体控件,并且可以根据情况自定义控件 et = (EditText) layout.findViewById(R.id.edittext); et.setBackgroundColor(Color.YELLOW); btn = (Button) layout.findViewById(R.id.btn); btn.setBackgroundColor(Color.CYAN); // 显示 setContentView(layout); } }
getSystemService是Activity中的方法,根据传入的name来取得对应的服务对象,这些服务名称参数都是Context类中的常量:
传入的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 | 电话服务 |
转载地址:https://liwangjiang.blog.csdn.net/article/details/79900950 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月21日 09时22分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
51Nod - 1183 编辑距离 (dp)
2019-04-30
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
2019-04-30
反向传播&梯度下降 的直观理解程序(numpy)
2019-04-30
ACM 2017 南宁区域赛 Rake it in(对抗搜索)
2019-04-30
CodeForces - 931B World Cup (思维 模拟)
2019-04-30
CodeForces - 996D Suit and Tie (暴力)
2019-04-30
ACM 2017 香港区域赛 E - Base Station Sites(二分)
2019-04-30
ACM 2018 青岛区域赛 J-Books (模拟)
2019-04-30
ACM 2016 沈阳区域赛 E - Counting Cliques (dfs)
2019-04-30
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
2019-04-30
HDU - 5643 King's Game (约瑟夫环变式)
2019-04-30
UVA - 1452 Jump (约瑟夫环变式)
2019-04-30
POJ - 3517 And Then There Was One (约瑟夫环变式)
2019-04-30
HDU - 2068 RPG的错排 (错排+组合数)
2019-04-30
CodeForces 591C Median Smoothing(思维 模拟)
2019-04-30
升级yosemite后java出错的解决
2019-04-30
mac || Linux 命令行下实现批量重命名
2019-04-30
java常用类 String面试题
2019-04-30