在编写xml文件时,为了预览效果,经常会使用默认填上一些内容,比如TextView时,随便写上一个text
<TextView
...
android:text="Name:" />
但是如果这个在实际发布的时候忘记了删除这个text,就有可能出现问题了
其实在Android Studio上,可以使用一个更加优雅和高效的方式,那就是使用tools属性
首先添加tools的namespace
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
...
然后就可以放心的使用了
<TextView
tools:text="Name:"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
tools属性是designtime attribute,也就只有在Android Studio中进行layout预览的时候有效,运行的时候这些属性会被删除
一般android:命名空间有的属性,使用tools都会有效
tools属性除了进行属性值的预览外,还可以对一些属性进行unset,因为在预览的时候,tools:属性会覆盖android:属性
举个例子,有个按钮默认是隐藏的,但是你想在编辑layout的时候还能看到他,但是有不想反复的修改属性,可以这样做
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First"
android:visibility="invisible"
tools:visibility="visible" />
在编辑layout的时候,这Button是可见的,但是正真打包的时候,这个Button是不可见的
除了基本属性,还有一些神奇的属性可以使用:
tools:listitem tools:listheader tools:listfooter
在ListView, RecyclerView中预览item
tools:layout
Fragment标签使用,告诉Fragment使用哪个布局
tools:showIn
如果layout被include,使用tools:showIn指定父layout,就可以预览include后的效果了,如果使用merge标签作为根布局,看上去就不会一团糟了
tools:parent
使用自定义view,如果layout的根节点为merge,指定自定义view,例如
tools:parent="com.example.CustomView"
merge内的控件就会根据CustomView进行布局
tools:context
这个比较常见,新建一个Activity的时候都有,可以通过知道的context读取Activity的主题,标题,甚至menu,然后显示预览
tools:ignore
忽略lint的检查
tools:targetApi
tools:locale
制定默认资源文件夹的地区,制定为中国,系统就不会警告没有添加中文的翻译了