Learn to walk before you run

Android布局中tools属性的使用笔记

2019.10.15

布局时预览数据方便排版,又能够在对接真实数据运行后动态替换和移除这些无关数据, tools:可以替换任何以 android:为前缀的属性,并为其设置样例数据(sample data)

xml文件顶层引入tools的命名空间

 xmlns:tools="http://schemas.android.com/tools"

1.tools:ignore

示例

MissingTranslation忽略lint检查中的国际化提示

<resources xmlns:tools="http://schemas.android.com/tools">
    <string name="app_name">ConstraintSample</string>
    <string name="header_image_string" tools:ignore="MissingTranslation">header image</string>
</resources>

示例

忽略ImageView内容提示

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_person_off"
    tools:ignore="contentDescription" />

2.tools:targetApi

属性值可以是 API Code 名或者 API 常数值,它支持一切属性。如:我们都知道,android:elevation属性是在 API 21 版本以上才支持的,所以我们可以通过以下代码规避 lint的警告

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:elevation="4dp"
    tools:targetApi="lollipop"/>

3.tools:locale

这个属性主要用在 标签内,用来指定当前资源中默认为哪种语言和区域,进而规避语言拼写的检测,比如你可以指定 values/strings.xml文件的默认语言是西班牙语而不是英语

<resources xmlns:tools="http://schemas.android.com/tools"
    tools:locale="es">

4.资源压缩属性

我们可以通过 tools:shrinkMode 和 tools:keep 属性来分别指定资源压缩的模式和需要保留的不被压缩的资源 ,还可以通过 tools:discard属性来指定需要保留的资源,与 keep功能类似

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:shrinkMode="strict" 
    tools:keep="@layout/activity_video*,@layout/dialog_update_v2"
    tools:discard="@layout/unused_layout,@drawable/unused_selector" />

5.tools:layout

这个属性只能用于 fragment控件中, 如果我们的 activity布局文件中声明了 控件,我们就可以通过 tools:layout=”@layout/fragment_main”来在当前 activity布局中预览 fragment中的布局效果

6.tools:showIn

可以指定其他布局文件像 组件一样在当前布局文件中使用和预览 控件的实际效果。 例如,我们 card_item_layout.xml 作为 showIn的对象给 show_in_layout.xml 布局使用,然后我就可以看到 show_in_layout.xml 中如下效果:

7.tools:menu

这个属性可以给当前布局预览器的 Toolbar 添加多个菜单项,但仅限于布局文件的根节点元素

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:menu="menu1,menu2" />

8.tools:maxValue | tools:minValue

这两个属性仅用于 ,可以在预览时指定其最大值和最小值

<NumberPicker 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/numberPicker"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:minValue="0"
    tools:maxValue="10" />

9.重点--tools:listitem | tools:listheader | tools:listfooter | tools:listCount

上面四个属性仅用于 及其子类(如:ListView和 RecyclerView)。然而,它们内部仍有一些使用限制: tools:listCount仅用于 RecyclerView; tools:listheadertools:listfooter仅限于 ListView; 至于 tools:listitem属性二者皆可用。

  <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/dp_32"
        android:layout_marginRight="@dimen/dp_32"
        tools:layoutManager="android.support.v7.widget.GridLayoutManager"
        tools:listitem="@layout/item_error_type"
        tools:spanCount="3" />

10.★★★★ Sample data 样本数据属性

属性值描述
@tools:sample/full_names生成随机用户名-全
@tools:sample/first_names生成随机用户名-姓
@tools:sample/last_names生成随机用户名-名
@tools:sample/cities生成随机城市名
@tools:sample/us_zipcodes邮编
@tools:sample/us_phones手机号
@tools:sample/lorem随机占位文本如:@tools:sample/lorem/random
@tools:sample/date/day_of_week
@tools:sample/date/ddmmyy
@tools:sample/date/mmddyy
@tools:sample/date/hhmm
@tools:sample/date/hhmmss
@tools:sample/avatars随机用户头像
@tools:sample/backgrounds/scenic随机背景

示例-随机用户头像

<ImageView
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:id="@+id/imageView
            tools:srcCompat="@tools:sample/avatars"/>

示例-随机文本占位

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            tools:text="@tools:sample/lorem/random"
            tools:maxLines="8"
            android:ellipsize="end"
            android:textSize="14sp"
            android:textColor="@color/title_color"/>

补充★★★★★ 自定义样例数据(Sample Data)

步骤: 1.资源res目录右键 new 创建"Sample Data Directory"文件夹 2.在以上文件夹中创建txt文件如users.txt 3.文件中每行一条数据 4.使用:tools:text="@sample/users"

示例

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            tools:text="@sample/users" />

★★★★★通过自定义 Json 格式的 数据来为控件绑定数据★★★★★ 图

以上操作的时候 Android studio 都会自动提示 sampledata路径下的数据文件,Json 格式亦会提示到具体字段

示例

<TextView
            android:id="@+id/card_item_username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:textColor="#8989ae"
            android:layout_marginEnd="16dp"
            android:paddingEnd="16dp"
            tools:text="@sample/sample.json/data/username" />