Android的基本UI界面一般都是在xml文件中定义好,然后通过activity的setContentView来显示在界面上,这是Android UI的最简单的构建方式。其实,为了实现更加复杂和更加灵活的UI界面,往往需要动态生成UI界面,甚至根据用户的点击或者配置,动态地改变UI,本文即介绍该技巧。


假设Android工程的一个xml文件名为activity_main.xml,定义如下:


    


在 MainActivity 中,希望显示这个简单的界面有三种方式(注:下面的代码均在 MainActivity 的 onCreate() 函数中实现 )。


(1) 第一种方式,直接通过传统的 setContentView(R.layout.*) 来加载,即:



setContentView(R.layout.activity_main);                                                           TextView text = (TextView)this.findViewById(R.id.DynamicText);text.setText("Hello World");


(2) 第二种方式,通过 LayoutInflater 来间接加载,即:


LayoutInflater mInflater = LayoutInflater.from(this);     View contentView  = mInflater.inflate(R.layout.activity_main,null);                                                                                                           TextView text = (TextView)contentView.findViewById(R.id.DynamicText);text.setText("Hello World");                                              setContentView(contentView);


注:


LayoutInflater 相当于一个“布局加载器”,有三种方式可以从系统中获取到该布局加载器对象,如:


方法一: LayoutInflater.from(this);


方法二: (LayoutInflater)this.getSystemService(this.LAYOUT_INFLATER_SERVICE);


方法三: this.getLayoutInflater();


通过该对象的 inflate方法,可以将指定的xml文件加载转换为View类对象,该xml文件中的控件的对象,都可以通过该View对象的findViewById方法获取。


(3)第三种方式,纯粹地手工创建 UI 界面


xml 文件中的任何标签,都是有相应的类来定义的,因此,我们完全可以不使用xml 文件,纯粹地动态创建所需的UI界面,示例如下:


LinearLayout layout = new LinearLayout(this);                                                                                                      TextView text = new TextView(this);text.setText("Hello World");text.setLayoutParams(new    ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));                                                                                                      layout.addView(text);                                                                                                      setContentView(layout);


Android动态UI创建的技巧就说到这儿了,在本示例中,为了方便理解,都是采用的最简单的例子,因此可能看不出动态创建UI的优点和用途,但是不要紧,先掌握基本技巧,后面的文章中,会慢慢将这些技术应用起来,到时侯就能理解其真正的应用场景了。


还是那句话,有啥不清楚的地方,欢迎留言讨论或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。


更多相关文章

  1. Android(安卓)4.0的12大新特性
  2. Android(安卓)Studio使用教程(一)
  3. Android的UI设计与后台线程交互
  4. Windows下的Android(安卓)SDK下载,2.2之前各个版本及Google API,文
  5. android数据库 Android自带数据库SQLite 操作 一步一步 图示教程
  6. android启动过程及各个镜像间的关系
  7. Android(安卓)应用没有桌面图标
  8. android动态加载已安装apk中的方法
  9. NPM 和webpack 的基础使用

随机推荐

  1. Haisi3716C (海思)源代码 编译并烧写
  2. Android(安卓)3D引擎之min3D--支持材质和
  3. android系统学习笔记六
  4. API DEMO APPWIGHT 学习
  5. 计时器Chronometer和时钟(AnalogClock和Di
  6. Android(安卓)如何检测一个服务是否还在
  7. android中,rotate,translate,alpha属性分
  8. 【Android基础知识】选项菜单、上下文菜
  9. android JNI--- 搭建环境(1)
  10. Android中ContentProvider和Uri用法!!