1.为了满足多样化的定制需求,传统的UI加载方式已经满足不了我们的需求,为了创建出更友好,更快速的界面,我们有时需要根据用户的需求来生成控件,android动态加载机制简析,下面介绍常见的三种方式。

2.最常见的传统加载机制

这种方式也就我们用的比较多的一样方式,一般最简单的就是用这种方式来生成控件的,这种方式先将所需要的控件写在.xml文件中,然后通过setContentView(R.layout.main);就搞定了,这种方式太简单就不再讲解了。

3.通过创建容器来加载UI控件,这种方式就是动态加载中的一种。

 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
//        创建一个容器final LinearLayout layout2=new LinearLayout(this);
//        设置容器的布局方式layout2.setOrientation(LinearLayout.VERTICAL);
//       新建按钮1Button btn1=new Button(this);
//       新建按钮2Button btn2=new Button(this);
//        按钮显示的文字btn1.setText("Button1");btn2.setText("Button2");
//        将按钮控件加入到容器中layout2.addView(btn1);layout2.addView(btn2);
//显示setContentView(layout2);}

上面那种方式可以创建多种容器,也可以布局多种UI控件,还可以设置View和ViewGroup的其它参数,如宽高等。

4.通过 LayoutInflater 来间接加载

这种加载方式有三种形式,如下

  • 方法一: LayoutInflater layoutInflater = LayoutInflater.from(context);
  • 方法二:LayoutInflater layoutInflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  • 方法三: this.getLayoutInflater();

三种方式并没有太大的区别,本质都是调用Context.getSystemService()。只是不同的分装形式而已,layoutInflater.inflate(resourceId, root); inflate()方法一般接收两个参数,第一个参数就是要加载的布局id,第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传null。这样就成功成功创建了一个布局的实例,之后再将它添加到指定的位置就可以显示出来了。

那么这种方式和我们平时用的findViewById()方法又有什么不同呢?


LayoutInflater通常用于动态载入的界面,使用LayoutInflater的inflate方法动态接入layout文件;


findViewById通常用于在已经载入的界面,使用findViewById()方法来获得其中的界面元素。


    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LayoutInflater mInflater = LayoutInflater.from(this);View contentView  = mInflater.inflate(R.layout.main,null);TextView text = (TextView)contentView.findViewById(R.id.DynamicText);text.setText("Hello Dragon test");setContentView(contentView);}

5关于上面方法的深入研究可以查看下的reference


专注于AR的在移动端的实现,如果你还有问题没解决,你可以加入我们一起交流。或是关注我们的技术公众号,这是提供技术干货的地方,你有干货可以向我们推荐。

如果你觉得写的不错,对你有用,请在下面点个 支持一下,有问题可以在下面留言评论。


reference:

1.https://segmentfault.com/a/1190000003813755

2.http://ticktick.blog.51cto.com/823160/1256593

3.http://blog.csdn.net/guolin_blog/article/details/12921889

4.https://developer.android.com/reference/android/view/LayoutInflater.html

android studio for android learning (二十七) UI控件动态加载机制浅析相关推荐

  1. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  2. Android插件化学习之路(一)之动态加载综述

    前段时间,公司项目完成了插件化的开发,自己也因此学习了很多Android插件化的知识,于是想把这些内容记录下来,本次带来Android插件化的第一篇:动态加载综述 Android插件化学习之路(一)之 ...

  3. MapGis二次开发——基础地图目录树控件的加载

    MapGis二次开发--基础地图目录树控件的加载 第一步:添加MapGis引用 MapGis动态库位置是在你安装位置下的\Program\plugin下,例如我的安装位置就是:D:\MapGIS 10 ...

  4. Android apk动态加载机制的研究

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/22597587 (来自singwhatiwanna的csdn博客) 背景 问题 ...

  5. Android 自定义View 三板斧之二——组合现有控件

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现 ...

  6. Android开发之Android Studio 3.6新特性之获取控件id的高级方式ViewBinding

    一般获取id有如下几种方式: 访问布局控件ID方式 优点 缺点 findViewById 系统提供有保障 特别繁琐代码量大 第三方注解 快捷简单 引用三方可能有不确定因素 kotlinx.androi ...

  7. android studio打包apk,jnilibs中的so库未被加载到apk内

    不久前,因为需要接入人脸识别以及某个tts的播报功能,人脸识别使用旷世,语音本地播报使用思必驰,在集成的时候出现思必驰的so库无法集成到apk内,思必驰的so库结构为: ,旷世的sdk却是使用的aar ...

  8. 基于Visual Studio扩展的WPF工业组态UI控件-ConPipe

    本文的组态控件是由<轻量而敏捷的工业组态软件UI设计工具-ConPipe Studio 2022> 和 <轻量而敏捷的工业组态软件UI设计工具-机械组态篇>两篇文章中的方案全新 ...

  9. Vue(二十八)el-cascader 动态加载 - 省市区组件

    1.后台接口为点击加载下一级 ,传省市区id <template><el-cascaderv-model="selectedOptions"placeholder ...

  10. Android基础学习(二)—— 常用控件

    TextView 显示文本内容 Button 按钮 EditText 输入框 ImageView 显示图片 ProgressBar 进度条 ToolBar 自定义标题栏 AlertDialog 对话框 ...

最新文章

  1. 计算机网络实验五,计算机网络(实验五).docx
  2. 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
  3. java去除不为null,JAVA代码中去掉 “!=null”
  4. python的应用范围有哪些_Python主要应用场景有哪些?
  5. 美的物联平台的云上实践与应用
  6. Nagios页面介绍(四)
  7. Redis源码阅读 (备份机制)
  8. c性能大容量cket_水合低共熔电解质有助于改善水性锌电池的性能
  9. c语言 pow算圆的面积,简单微积分--积分求圆的面积
  10. 实战篇:VMware Workstation 虚拟机安装 Linux 系统
  11. 32岁的程序员被裁,java宿舍管理系统源码jsp
  12. 获取微信小程序wx.login 生成的code
  13. iOS9有哪些新特性
  14. ​ios11自带邮件添加新的邮箱账号
  15. 简书爬ajax接口获取csrf,Python爬取简书主页信息
  16. 企业管理新标杆:向对手学习
  17. pytorch 回归问题实战
  18. 中移动通信研究院2013社会招聘
  19. 量化交易中,如何使用Python画K线、成交量、买卖点【邢不行】
  20. [Paper Reading] Towards Conversational Recommendation over Multi-Type Dialogs

热门文章

  1. 如何利用ping命令拥有最佳MTU?
  2. Aps.Net js ymPrompt消息提示组件4.0版
  3. 设计网际网络的地址标准
  4. ajax实现form表单提交
  5. 南阳oj-----找球号(一)(set)
  6. 计算机平面设计与工程论文,计算机平面设计毕业论文
  7. 禁用 device/credential guard_iOS 13.3.1 Beta版中引入了禁用U1超宽带芯片的开关
  8. 软件功能测试怎么把关指标,软件测试方法经与验.doc
  9. 华为harmonyos官方微博账号,华为 EMUI 官方微信和微博更名为 HarmonyOS
  10. 济安横断面为什么会有水印_PS差值模式是如何去水印的?你看的懂抖音的沙雕做法?...