使用<include/> 对布局的重用

声明:有些地方翻译时候按照中文的逻辑进行了相应的调整。第一次翻译,难免有些错误,感谢指正。

原文链接: 

Re-using Layouts with <include/>

使用<include/>重用布局

尽管Android提供了各式各样的控件以供人员在布局内重复使用,你也可能需要重用一些复杂的布局,那些布局都是一些自定义的布局。通过使用<include/><merge/>标志可将一个布局内嵌到另一个布局里面,从而提高重用布局效率。
当你需要创建一个可重用的复杂布局时,重用布局作用显得尤为重要。比如,一个是/否面板按钮,或一个带文字说明的自定义的进度条,被重用的元素意味着在可被内嵌到任何布局文件里面,并且被分开管理。因此,当你自定义一个视图来创建一个单独的UI控件时候,若有一个功能相同的布局,那你就可以直接重用它,效率更高一些。

如果你已经知道某个布局会被重用,那么就创建和定义它。比如,下面这个布局文件(titlebar.xml)就是引自G-Kenya codelab,它定义了一个标题栏,被多个activity所包含:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width=”match_parent”
    android:layout_height="wrap_content"
    android:background="@color/titlebar_bg">

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content" 
               android:src="@drawable/gafricalogo" />
</FrameLayout>

你可以将该设图添加到你想要放入的布局里面。

使用<include>标志

在你想要添加可重用的元素布局里面,添加<include/>标志。如,下面就是一个布局文件,里面包含了上面自定义的可重用titlebar.xml布局,也是引自G-Kenya codelab。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:background="@color/app_bg"
    android:gravity="center_horizontal">

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

    <TextView android:layout_width=”match_parent”
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />

    ...

</LinearLayout>

你也可以在<include/>标志里面覆盖根试图里面的布局属性(任何android:layout_* 结构的属性),如下:

<include android:id=”@+id/news_title”
         android:layout_width=”match_parent”
         android:layout_height=”match_parent”
         layout=”@layout/title”/>

但是,如果你想在使用<include>标志时候,覆盖布局其他属性,你必须同时覆盖android:layout_height 和 android:layout_width属性,这样其他属性被覆盖才能生效。

使用<merge>标志

使用<merge/>标志可以在不同布局内嵌层次结构中,消除多余的视图组,比如,如果你的主布局是一个verticalLinearLayout, 在这个布局里面,两个连续的视图可以被重用在其他布局里面,如果你将两个视图内嵌到其他试图里面,这两个视图需要它们自己的根试图,即上面那个vertical LinearLayout。但是当被内嵌到另一个vertical LinearLayout根试图时,就形成了一个vertical LinearLayout内嵌另一个vertical LinearLayout,被内嵌的那个vertical LinearLayout不仅没有起到真正作用,反而降低了UI性能。
为了避免这些多余的试图层,你可以使用<merge>作为被重用布局的跟视图。如:

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

    <Button
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="@string/add"/>

    <Button
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="@string/delete"/>

</merge>

现在,当你使用<include/>标志时候,将这个布局内嵌到另一个布局里面,系统将会忽略<merge>元素,直接将这个两个button放入到被内嵌的布局里面,代替<include/>的位置。

BTW:这里面有一篇分析<merge/>使用的文章,非常不错,推荐给大家-----> 点击打开链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值