Android随笔之动态加载布局

来源:互联网 发布:冷暴力孩子知乎 编辑:程序博客网 时间:2024/06/05 14:58

前言:

动态加载与静态加载的区别。

1、动态加载是一种优化,降低了资源的耗费。偶尔,在布局中会有一些比较复杂但是又很少用到的控件,你都可以直到真正需要的时候再加载他们,以降低你的内存消耗,提升渲染效率。

2、动态布局,也就是可以根据业务的需求改变界面。实际上就是用代码写出界面,代码量比较大。而且维护起来十分繁琐。特别是一些界面空间比较多的时候。静态的布局,是通过xml来实现的,适用于页面比较固定的情况。但是维护起来比较方便。


正文:

动态加载布局用inflater来实现。

其步骤一般为:动态加载布局 –> 向布局中动态添加组件

一、动态加载布局:

  • 在Activity、Fragment等中可获取到getLayoutInflater()
LayoutInflater _inflater = getLayoutInflater();View view = _inflater.inflate(R.layout.activity_main, null);setContentView(_view);
  • 在Adapter中不能获取到getLayoutInflater(),通过上下文获取
LayoutInflater _inflater = LayoutInflater.from(this);View view = _inflater.inflate(R.layout.activity_main, null);setContentView(_view);

二、在布局中动态添加组件:

    // 1、获取根布局属性    FrameLayout frameLayout = (FrameLayout)   findViewById(R.id.flyt_main);    // 2、获取组件,设置组件属性    final Button button = new Button(this);    button.setText("跳转到SecondActivity");    // 3、在布局中添加组件,设置组件属性    frameLayout.addView(_button,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);

当然,除了一般方法,当然也有高等级的使用方式,那就是静态XML和动态加载XML混合使用。

混合使用也分为:

  • 静态主Layout动态加载静态子Layout
    操作要点:
    在一个静态Layout的基础上,将其作为子Layout,构建一个主Layout。
    要在主Layout中设置一个容纳子Layout的容器
    在程序中获取到容器,并将子Layout以view的形式加入主Layout中。

  • 静态主Layout动态加载动态的Layout
    操作要点:
    同样在一个静态Layout的基础上,将其作为子Layout,构建一个主Layout。并在主Layout中设置一个容纳子Layout的容器
    构建一个自定义的Layout类,在类中加载子Layout(当然,你可以封装很多的方法实现你需要的功能)。
    因为子Layout的加载已经包含在自定义的Layout类中,所以需要实例化该Layout类,并将其加入到主Layout中。


详细代码例子请看:android: 静态XML和动态加载XML混合使用,以及重写Layout控件

0 0