android 开发零起步学习笔记(十):UI控件动态加载机制浅析

原文:http://blog.csdn.net/yywan1314520/article/details/52740362

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);
//       新建按钮1
        Button btn1=new Button(this);
//       新建按钮2
        Button btn2=new Button(this);
//        按钮显示的文字
        btn1.setText("Button1");
        btn2.setText("Button2");
//        将按钮控件加入到容器中
        layout2.addView(btn1);
        layout2.addView(btn2);
//显示
        setContentView(layout2);
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上面那种方式可以创建多种容器,也可以布局多种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);



    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值