本文译自androd官方技术文档《Designtime Layout Attributes》:http://tools.android.com/tips/layout-designtime-attributes。

本文地址:http://blog.csdn.net/maosidiaoxian/article/details/41541269。转载请注明出处。翻译如有错讹,敬请指正。

设计时布局属性

在 Android Studio 0.2.11 版本中,布局渲染(用于布局编辑器以及XML编辑器的布局预览窗口),支持 设计时布局属性.


这些属性用于布局在工具里渲染时期,但是对运行时没有任何影响。这一点很有用,比如如果你想在编辑布局的时候把 示例数据数据放到文本框中,但又不想这些属性影响到你的应用的运行。

若要使用设计时属性,请首先确保您有在您的布局中定义工具命名空间:

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

这个工具命名空间是Android的工具专门公认的命名空间,所以你定义在视图元素上的所有的tool-namespace的属性,在应用程序被打包时都将自动剥离并且不会对运行时带来开销。

然后,例如设置文本字段的文本,使用与Android 框架中相同的属性,但使用 tools: 命名空间而不是 android: 命名空间:

        <TextView 
            android:text="Name:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <EditText 
            tools:text="John Doe"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
在上面例子中,Name 标签使用正常的文本属性,它将在运行时显示。不过,文本字段使用设计时属性,因此它在工具中出现,而不是在运行时。 

一般情况下,你可以设置任何的Android 框架的属性作为设计时属性;只是使用tools:命名空间而不是android:命名空间。还要注意的是,你不必只选择其中的一个;您可以设置两个属性,Android
命名空间属性(在运行时使用)和工具属性(在设计时将覆盖运行时属性)。

您还可以使用设计时属性在工具里删除一个属性的值。例如,有这样一个bug(http://b.android.com/58448),你不能在布局编辑器里对ListView使用fastScrollAlwaysVisible属性。但是,您可能仍然希望该属性在运行时是设置的。通过设计时属性,你可以这样解决:
    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fastScrollAlwaysVisible="true"
        tools:fastScrollAlwaysVisible=""/>

下面是另一个例子;我们有一个有多个子view的FrameLayout,并且在设计时,我们只希望看到他们中的一个,比如说第二个:我们可以使用 tools:visibility 属性:


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="First"
        tools:visibility="invisible" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Second"
        tools:visibility="visible" />

(根据你的需要,你可能会使用 visibility="gone" 来代替 visibility="invisible" 。)

限制

  • 目前仅支持覆盖现有的属性。我们可能要定义一些额外的方便的属性,使比如选择在ViewFlipper 显示的子view等等变得简单
  • 此时你必须手动编辑您的设计时属性
    • 它们不会作为一个选项出现,比如在布局编辑器属性表中。
    • 编辑器的代码完成功能不会帮助你进入这些属性;使用它们的最简单的方法是先在Android命名空间中进入,然后进行更换前缀来完成。
  • 需要注意的是设计时属性仅支持布局文件本身。你不能在其他地方使用它们——比如在菜单 XML 文件中,字符串资源定义中,等等。
  • 在这一点上,设计时属性只能用于框架资源中,而无法在自定义属性使用。
  • 查看 https://code.google.com/p/android/issues/detail?id=46186 以获取背景资料、额外请求或注释等信息。
关于 tools: 命名空间的其他属性的详细信息,请参阅 Tools Attributes

android官方技术文档翻译——设计时布局属性的更多相关文章

  1. android官方技术文档翻译——工具属性

    本文译自androd官方技术文档<Tools Attributes>:http://tools.android.com/tech-docs/tools-attributes 本文地址:ht ...

  2. Android官方技术文档翻译——Gradle 插件用户指南(6)

    没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...

  3. Android官方技术文档翻译——Gradle 插件用户指南(5)

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

  4. Android官方技术文档翻译——Gradle 插件用户指南(4)

    最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...

  5. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...

  6. Android官方技术文档翻译——Gradle 插件用户指南(1-3)

    不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...

  7. Android官方技术文档翻译——清单合并

    本文译自Android官方技术文档<Manifest Merger>,原文地址:http://tools.android.com/tech-docs/new-build-system/us ...

  8. Android官方技术文档翻译——迁移 Gradle 项目到1.0.0 版本

    本文译自Android官方技术文档<Migrating Gradle Projects to version 1.0.0>,原文地址:http://tools.android.com/te ...

  9. Android官方技术文档翻译——新构建系统概述

    本文译自Android官方技术文档<New Build System>,原文地址:http://tools.android.com/tech-docs/new-build-system. ...

随机推荐

  1. iOS支付宝,微信,银联支付集成封装(上)

    一.集成支付宝支付 支付宝集成官方教程https://docs.open.alipay.com/204/105295/ 支付宝集成官方demo https://docs.open.alipay.com ...

  2. Linux设置文件读写权限

    设置文件夹的读写权限: sudo chmod -R 777 /data 权限码描述 sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读 ...

  3. Python3 XML解析

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 你可以通过本站学习XML教程 ...

  4. Android艺术开发探索第三章——View的事件体系(上)

    Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 Motion ...

  5. Spring之DAO模块

    Spring的DAO模块提供了对JDBC.Hibernate.JDO等DAO层支持 DAO模块依赖于commons-pool.jar.commons-collections.jar Spring完全抛 ...

  6. Linux动态频率调节系统CPUFreq之二:核心(core)架构与API

    上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共 ...

  7. Swift基础之守卫语句guard

    本篇文章翻译自:http://ericcerney.com/swift-guard-statement/原作者:ecerney该语法为swift2.0之后添加的新特性 最开始在Apple的Platfo ...

  8. [django]urls.py 中重定向

    Django 1.5 有时候需要对一个链接直接重定向,比如首页啥的重定向到一个内容页等等,在views.py 中可以设定,如果没有参数啥的在urls.py 中设定更加方面 from django.vi ...

  9. Dynamics CRM2013 用户进入系统所必需的那些权限

    本篇以CRM2013为例,在CRM中新建一个安全角色后该安全角色基本是空的,如果新建的安全角色作为一个账号的唯一安全角色时,那这个安全角色除了需要配置业务场景所需的权限外,是要优先具备进入CRM系统的 ...

  10. Swift中集合类型indexOf(Element)提示错误的解决办法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 初学Swift,会遇到一些潜在的小问题,比如我们在某个集合对象 ...