Android开发的小技巧,在Android Studio中使用Designtime Layout Attributes

时间:2022-04-09 00:25:32

在编写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

同@TargetApi

tools:locale

制定默认资源文件夹的地区,制定为中国,系统就不会警告没有添加中文的翻译了