XML中定义AndroidLayout时,有四个比较特别的标签是非常重要的,分别是<viewStub/>, <requestFocus />, <merge /> <include />,其中有三个是与资源复用有关。
1<ViewStub />标签
ViewStub
是一个不可见的,大小为0View,最佳用途就是实现View的延迟加载,在需要的时候再加载View,和Java中常见的性能优化方法延迟加载一样。当调用ViewStubsetVisibility函数设置为可见或则调用inflate()方法初始化该View的时候,ViewStub引用的资源开始初始化,然后引用的资源会替代掉ViewStub,把自己填充在ViewStub的原位置。因此在没有调用setVisibility(int)inflate()方法之前ViewStub会一直存在组件树层级结构中,但是由于ViewStub非常轻量级,这对性能影响非常小。可以通过ViewStubinflatedId属性来重新定义引用的layoutid也就是说,加入我们所引用的layoutidR.layout.prelayout,然后我们在ViewStub中添加属性android:inflatedId="@+id/subLayout“,那么我们就可以用R.layout.subLayout来引用这个layout)。

示例:
            <ViewStub android:>UI
结构视图:

Android Layout标签之 - viewStub,requestFocus,merge,include 

我们可以很明显的看到出现了两个framelayout节点,这两个意义完全相同的节点造成了资源浪费(这里可以提醒大家在开发工程中可以习惯性的通过hierarchyViewer查看当前UI资源的分配情况),那么如何才能解决这种问题呢(就当前例子是如何去掉多余的frameLayout节点),这时候就要用到<merge />标签来处理类似的问题了。我们将上边xml代码中的FrameLayout替换成merge
<merge xmlns:andro>UI
结构。

 

Android Layout标签之 - viewStub,requestFocus,merge,include


    * <merge />
只可以作为layout的根节点。
    * 
当需要扩充的layout本身是由merge作为根节点的话,需要将被导入的layout置于viewGroup中,同时需要设置attachToRoottrue

 

REFERENCES:http://hexen.blog.51cto.com/1110171/820197

相关文章:

  • 2021-09-06
  • 2022-01-31
  • 2021-07-08
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-03
  • 2022-01-16
  • 2022-01-25
  • 2021-06-21
  • 2021-09-30
  • 2022-01-22
  • 2018-06-25
相关资源
相似解决方案