本文译自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。