【Interface&navigation】通过《include/》重新使用布局(9)

虽然Android提供了各种小部件来提供小型且可重用的交互元素,但您可能还需要重新使用需要特殊布局的较大组件。为了有效地重新使用完整的布局,可以使用<include/>和<merge/>标签在当前布局中嵌入另一个布局。

重复使用布局非常强大,因为它允许您创建可重用的复杂布局。例如,是/否按钮面板,或带有说明文字的自定义进度栏。这也意味着您的应用程序的任何元素都可以在多个布局中提取,分别管理,然后包含在每个布局中。因此,尽管可以通过编写自定义来创建各个UI组件,View但通过重新使用布局文件,您可以更轻松地完成此任务。

创建一个可重用的布局


如果您已经知道要重新使用的布局,请创建一个新的XML文件并定义布局。例如,以下是定义要包含在每个活动(titlebar.xml)中的标题栏的布局:

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

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

根目录View应完全按照您希望它出现在添加此布局的每个布局中。

注意:tools:showIn上述XML中 的属性是一个特殊属性,在编译期间会被删除,并且仅在Android Studio的设计时使用 - 它指定包含此文件的布局,因此您可以在出现文件时预览(并编辑)该文件同时嵌入父级布局中。

使用<include>标签


在要添加可重用组件的布局中,添加 <include/>标签。例如,这是一个包含上面标题栏的布局:

这是布局文件:

<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>

您也可以android:layout_*通过在<include/>标签中指定包含布局的根视图的所有布局参数(任何属性)。例如:

<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 />标签包含在另一个布局中时,该标签有助于消除视图层次结构中的冗余视图组。例如,如果您的主布局是LinearLayout可以在多个布局中重新使用两个连续视图的垂直布局,则放置两个视图的可重用布局需要具有其自己的根视图。但是,使用另一个LinearLayout作为可重用布局的根目录会导致垂直LinearLayout内部出现垂直LinearLayout。嵌套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>元素,并将两个按钮直接放置在布局中,而不是<include/>标签。

有关与此主题相关的更多信息,请参阅 布局资源。

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Interface&navigation】通过《include/》重新使用布局(9)

转载于:https://blog.51cto.com/4789781/2133070

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旋转变压器---数字转换器作为现代伺服系统中被广泛使用的角位置测量系统,大量应用于高精度及大中型数控系统、机器人控制、工业控制、武器火力控制及惯性导航领域中。 传统的角测量系统面临的问题有:体积、重量、功耗偏大,调试、误差补偿试验复杂,费用较高。本文从微型化、智能化的方向进行研究,是解决传统角测量系统所面临问题的好途径。 本文所研究的旋转变压器---数字转换器是由信号调理模块、系统芯片C8051F064和输出控制模块组成的。整个系统的三路输入信号为X=AsinOcosar、Y=Acosθcos ot和Z=Ucosar(基准信号),输出信号为偏转角θ,输出形式为16 位数字量。信号调理模块是由模拟电路组成的,包括信号输入电路、相敏整流电路、滤波电路和直流稳压电源电路,其难点在于相敏整流电路的设计。信号调理模块的主要功能是把输入的交流信号X=AsinOcosor、Y=Acosθcosot转变成直流信号Bsinθ和Bcosθ,并使输出的直流信号在0~2.4V之间;系统芯片C8051F064是CYGNAL公司近年来推出的一款功能齐全的完全集成的混合信号片上系统型单片机。在本文所设计的系统中,系统芯片的输入信号为直流信号Bsinθ和Bcosθ,通过片内自带的2个16位A/D转换器对输入信号的数据进行采样和转换,并对转换完的数据进行滤波处理,以减小由于外界干扰而产生的误差,再用除法和反正切函数解算出偏转角θ的16位数字量;输出控制模块主要完成的功能是通过UARTO向计算机实时发送由单片机计算出来的偏转角度0的16位数字量,而串口的RS-232电平与单片机系统采用的是TTL电平之间的转换所采用的转换芯片是MC1488和MC1489。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值