1.引言

可复用组件是优秀的面向对象设计的标识,Android支持抽象视图,从而提供了一个类似层级的模块化。通过把UI分离成独立的组件,可以在整个应用中使用它们。这样会让应用具有统一的外观并且是的改变设计更加容易。

2.<include>标签

在android中提供了一个布局文件包含另一个布局文件的简单方法:<include>标签。通过这个标签,另一个布局被包含在试图层级中。就好比几个小朋友都在画画,我把小明画的天粘在我这张纸上,小红画的草地粘在我这张纸的底下,小白画的场景粘在中间,那么我就有了一副漂亮的画。当然我需要考虑的就是怎么样衔接最漂亮,不会有牵强,所以我要注意的:(1)我先给定要粘画的区域大小 (2)不要做色彩的衔接,免得不流畅。

下面是一个<include>的例子

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/sub_id"

android:layout_width="match_parent"

android:layout_height="match_parent"

<include layout="@layout/sub_layout"/>

</LinearLayout>

这里我们android:layout_* 就是我们在设置要粘贴的画布区域,随心所遇的设置。其余的属性都是被忽略的。

3.<merge>标签

在经常使用<include>标签时,布局可能会变得嵌套过多而导致UI绘图变慢。<merge>标签可以解决这个问题。<merge>标签指导系统移除子布局的顶层容器。当你包含一个子布局时,里面包含的视图会被合并到主布局中去,但没有额外的容器试图。

3.ViewStub

尽管<include>标签是你能够很容易的把UI分离成可复用的组件,你可能会发现被包含的布局很少会被用到。类似于进度和错误蓝的布局时可用的,但是在正常使用的过程中并不会出现,当被包含今布局之后,这些UI元素仍然是被扩张的,他们会占用CPU周期和内存,尽管是不被显示的。那怎么办?还好Android提供了一个解决问题才抽象。

ViewStub类是一个不会占用布局空间的不可见的视图。ViewStub引用一个将被添加到UI的外部布局,与<include>不同的是,被引用的布局不会被扩张,知道你发送特定请求他才会扩张。

有了ViewStub之后,布局的可选部分只会在你需要它们的时候可用,否则他们就会不可见,这样加快了UI的绘制速度。

<ViewStub

android:id="@+id/view_stub"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:inflatedId="@+id/sub"

android:layout="@layout/sub"/>

Android视图有3个可能的可见状态,每个都对布局有不同的影响。

**View.VISIBLE:视图对用户可见,并且会占据布局的空间。

**VIew.INVISIBLE:视图对用户不可见,但是会占用布局的空间。

**View.GONE:视图对用户不可见也不会占用布局空间。

要想扩张用ViewStub引用外部布局,可以自己扩张它或者改变它的可见性:

((ViewStub)findViewById(R.id.view_stub)).setVisibility(View.VISIABLE);

摘自:Android UI基础教程 [美]Jason Ostrander

更多相关文章

  1. Android(安卓)基于坐标的图形开发
  2. Android(安卓)View源码解读:浅谈DecorView与ViewRootImpl
  3. Android布局类型资源(二)---XML、drawable、layout
  4. NFC 基础
  5. android 5.0和6.0后新增的控件总结
  6. Android实现自定义测滑栏
  7. Android(安卓)UI 模式(patterns)
  8. 简单的Android(安卓)XML布局使用
  9. 38、Android编写应用-使用布局编辑器Layout Editor构建界面

随机推荐

  1. Android(安卓)UI开源软件(三)
  2. Android使用线程获取网络图片的方法
  3. Activity 以及 Intent的使用
  4. android字符串工具类
  5. ubuntu环境下反编译android apk
  6. Android Apk反编译函数对应法则
  7. android最简单的发送文本短信的demo
  8. Android中调用浏览器打开网页方式
  9. Android Lottie动画库
  10. Error:The module 'app' is an Android(