本文译自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. Android TextView常用属性

    [说明] TextView是用来显示文本的组件.以下介绍的是XML代码中的属性,在java代码中同样可通过 "组件名.setXXX()方法设置.如,tv.setTextColor(); [属 ...

  2. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  3. Python3 条件控制

    if 语句 Python中if语句的一般形式如下所示: if condition_1: statement_block_1 elif condition_2: statement_block_2 el ...

  4. Android 性能优化(一)内存篇

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54377370 本文出自:[余志强的博客] 本博客同时也发布在 Hoo ...

  5. Mysql 统一设置utf8字符

    无聊的关于有效配置文件路径的备忘 原来阿里云服务器的mysql 5.5 , 配置/etc/my.cnf是没有任何作用的,需要编辑/etc/mysql/my.cnf 妈的, 就是这一点让我测试了两天, ...

  6. Bootstrap3 排版-对齐

    通过文本对齐类,可以简单方便的将文字重新对齐. Left aligned text. Center aligned text. Right aligned text. Justified text. ...

  7. 浏览器加载和渲染html的顺序(html/css/js)

    最近在学习前端的技术,把html.js.css的基础知识看了看.感觉越看越觉得前端并不比后端容易,技术含量还是相当大的.今天突然想弄明白浏览器到底是怎么加载和渲染html的?html中的DOM.js文 ...

  8. Linux测量kernel子模块加载时间的方法

    1. 在文件kernel/init/main.c里面,在接口do_one_initcall( )中,将initcall_debug设置为true,然后编译boot.img 2. 使用adb shell ...

  9. Unity3d导出Recast geomset.txt

    Unity3d导出Recast geomset.txt (金庆的专栏) Recast Demo 输入需要 geomset.txt 文件来指定区域类型. 以ObjExporter.cs为基础,编写Uni ...

  10. Microsoft Dynamics CRM 2013/2015 选项集的多选

    CRM中的选项集多选一直是客户需求中的必选项,但从CRM进国内的3.0时代开始到目前的2015版本均没有提供该功能,但既然客户要了就得想办法满足,既然CRM本身的功能上不支持,那我们只有使用非官方支持 ...