在Android Studio 中,咱们建立一个 xml 布局文件以后,一般在自动生成的代码中,会有一个 tools 命名空间: xmlns:tools="http://schemas.android.com/tools"
。以前一直不知道是干吗用的,历来没有用过,而后要么手动删除,要么格式化代码的时候就自动把它删除了。直到今天翻看文档时才发现,这玩意儿居然有大用途!javascript
根据官方文档描述,根据其属性的功能类别,大体有三种主要功能:php
说的通俗一点就是:html
该部份内容是基于官方文档的总结整理,因为我的水平有限,理解可能会有误差,欢迎指正java
. | 说明 |
---|---|
应用范围 | xml中的任意元素 |
做用对象 | Lint Lint 是AndroidStudio提供的代码扫描工具 |
具体做用 | 让Lint 工具在检查代码时忽略指定的错误。 |
取值说明 | 不一样的错误对应不一样的id,这些id 就是 ignore的取值。如:MissingTranslation 。ignore后面能够同时跟多个id,多个id之间使用逗号分割 |
示例1:
Lint 检查时默认语言为 英文,若是在 xml 中有中文,就会报 MissingTranslation 错误,咱们加上 tools:ignore 以后便可避免。android
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
复制代码
示例2:app
. | 说明 |
---|---|
应用范围 | xml的任意元素 |
做用对象 | Lint |
具体做用 | 同 java 代码中的 @TargetApi 注解, 指明某个控件只在指定的API 及更高的版本中生效。这样,在使用 Lint 检测时就不会因 minSdkVersion 低于控件出现的版本而报错。 |
取值说明 | API 版本号对应的 int值 |
示例:dom
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:targetApi="14" >
复制代码
. | 说明 |
---|---|
应用范围 | <resources> |
做用对象 | Lint, Android Studio editor |
具体做用 | 指明 resources 中元素的语言类型,避免拼写检查或者Lint 检查时报错。这二者中默认的语言类型时英文 es |
取值说明 |
示例:
咱们在 values/strings.xml
中指明元素的语言版本。编辑器
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="es">
复制代码
如下属性在xml中定义以后,只在预览时会展现,正式部署以后并不会展现。
相似于 DataBindg 中引用字符串资源时的 default 属性。
工具
. | 说明 |
---|---|
应用范围 | view |
做用对象 | Android Studio布局编辑器 |
具体做用 | 将view的任意属性值的 android 前缀替换为 tools 以后,就能够实现预览效果。以tools 为命名空间的属性值只在预览时有效。 另外,在预览时,若是同时有 tools:xxx 和 android:xxx ,则优先展现 tools:xxx 的预览效果, 可参考示例代码2 |
取值说明 | 具体取值以view的属性取值为准。 |
示例代码1:
预览时展现指定文本布局
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="欢迎关注 CnPeng 公众号" />
复制代码
示例代码2:
tools:text 和 android:text 同时存在,在预览时会优先展现 tools:text
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="这些在预览时展现,并会在预览时优先于 android:text 展现" android:text="这些在部署以后会展现" />
复制代码
. | 说明 |
---|---|
应用范围 | xml 中的根布局 |
做用对象 | Lint, Android Studio布局编辑器 |
具体做用 | 声明该布局文件默认关联的 activity。声明以后会在布局编辑器或者预览界面中开启一些与该activity相关的特性,好比,在写 onClick时,直接输入方法名,而后点击自动完成代码的快捷键就会提示你在对应activity中建立该方法。This enables features in the editor or layout preview that require knowledge of the activity, such as what the layout theme should be in the preview and where to insert onClickhandlers when you make those from a quickfix . |
取值说明 | 关联的activity。须要带路径,建议与清单文件中注册 activity时的路径保持一致。 |
示例代码:
先声明关联的activity,而后直接写 onclick 方法名,而后按下自动完成代码的快捷键,就会提示在对应的activity中建立该方法。
. | 说明 |
---|---|
应用范围 | <RecyclerView> |
做用对象 | Android Studio 布局编辑器 |
具体做用 | 在 <RecyclerView> 节点中设置该属性以后,会指定在预览界面中绘制/展现几个条目 |
取值说明 | int 类型数值 |
示例代码:
预览界面展现 4个 条目
. | 说明 |
---|---|
应用范围 | < fragment> |
做用对象 | Android Studio 布局编辑器 |
具体做用 | 声明在预览时将哪一个布局文件填充到该Fragment |
取值说明 | 布局id 的引用值 |
示例代码:
在预览时将 testlayout 这个布局文件填充到fragment。testlayout的布局中包含一个 RecyclerView,并经过 itemCount 设置的预览时展现的条数为4(参考 tools:itemCount)
. | 说明 |
---|---|
应用范围 | <AdapterView>及其子类,如<ListView> |
做用对象 | Android Studio 布局编辑器 |
具体做用 | 指明 AdapterView在预览界面中所展现的 条目、头布局、脚步局 |
取值说明 | 布局文件的引用 |
示例代码:
这里略微有点尴尬,listfooter 在预览时并无展现出来,不知道是否是我操做的姿式不对
item_spinner.xml
<?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:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal">
<ImageView android:layout_width="@dimen/dp50" android:layout_height="@dimen/dp50" android:src="@drawable/logo" tools:ignore="ContentDescription"/>
<!--ignore 后面根由多个错误id时,用逗号分隔 ; -->
<TextView android:id="@+id/tv_item_suspendRv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="@dimen/dp10" android:gravity="center_vertical" android:text="abc" tools:ignore="HardcodedText,RtlHardcoded"/>
<!--使用 tools:text 设置预览文本-->
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="这是设置的预览文本"/>
</LinearLayout>
复制代码
注意
若是 条目布局中有 TextView及其子类控件
- 若是设置了 tools:text , 在预览时会优先展现该值;
- 若是没有设置 tools:text ,但设置了 android:text , 在预览时就会展现android:text 的属性值;
- 若是都没有设置,则会默认使用 item一、item2 填充到 TextView中做为预览文本
. | 说明 |
---|---|
应用范围 | 全部 <view> 的根节点(即 布局文件的根节点) |
做用对象 | Android Studio 布局编辑器 |
具体做用 | 声明该布局文件将会被哪一个布局经过 <include>引用。声明以后,在对应的文件中不要忘了用 <include>引用 |
取值说明 | 布局文件的引用。 |
示例代码:
testlayout2.xml 将会被 testlayout 引用。
testlayout2.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/testFragment" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:showIn="@layout/testlayout" tools:text="预览文本">
</TextView>
复制代码
testlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<include layout="@layout/testlayout2"/>
</LinearLayout>
复制代码
经过这种方式咱们在确认该布局文件在哪里使用了的时候就比较方便了。可是:
若是该布局文件被多处 include 引用时,tools:showIn 该怎么写呢?哪位朋友知道烦请告知。
. | 说明 |
---|---|
应用范围 | 布局文件的根节点(Any root <View> ) |
做用对象 | Android Studio布局编辑器 |
具体做用 | 声明在预览界面中 AppBar 将展现哪些菜单 |
取值说明 | menu文件的id,多个id 之间用逗号间隔。不须要任何前缀和后缀。The value can be one or more menu IDs, separated by commas (without @menu/ or any such ID prefix and without the .xml extension) |
注意:按照官方文档的说明,能够传入多个 menu id 。可是实际测试时发现,传入多个时右上角并无什么不一样的显示。
. | 说明 |
---|---|
应用范围 | <NumberPicker> |
做用对象 | Android Studio 布局编辑器 |
具体做用 | 为NumberPicker 设置预览时的最小值和最大值 |
取值说明 | int 型数值 |
示例说明:
这个加完以后,并无看到什么特殊效果。
. | 说明 |
---|---|
应用范围 | <DrawerLayout> |
做用对象 | Android Studio布局编辑器 |
具体做用 | 在预览界面中将 DrawerLayout 打开。 |
取值说明 | end、left、right、start。具体说明,参考下表 |
Constant | Value | Description |
---|---|---|
end | 800005 | Push object to the end of its container, not changing its size. |
left | 3 | Push object to the left of its container, not changing its size. |
right | 5 | Push object to the right of its container, not changing its size. |
start | 800003 | Push object to the beginning of its container, not changing its size. |
注意:
一、在 <DrawerLayout > 须要经过 layout_gravity 声明哪一部分做为侧拉窗口,其取值也是 end、start、left、right。
二、tools:openDrawer 的取值必须与侧拉窗口的 layout_gravity 的取值一致
代码示例:
<?xml version="1.0" encoding="utf-8"?>
<!--此处 openDrawer 的取值必须与侧拉窗口的 layout_gravity 取值一致-->
<android.support.v4.widget.DrawerLayout android:id="@+id/numberPicker" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:openDrawer="right">
<!--这是未展现侧拉界面时的主体内容-->
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" tools:text="这是主内容"/>
</RelativeLayout>
<!--这是侧拉窗口中的内容。必须经过 layout_gravity 属性声明这是一个侧拉展现的内容-->
<RelativeLayout android:layout_width="100dp" android:layout_height="match_parent" android:layout_gravity="right" android:background="#f2e67b">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:ems="1" tools:text="这是要侧拉的东西"/>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
复制代码
. | 说明 |
---|---|
应用范围 | 全部支持显示 text 或者 image 的view控件(Any view that supports UI text or images ) |
做用对象 | Android Studio 布局编辑器 |
具体做用 | 为View设置占位文本或图片。这其实就是系统预置的一堆字符串和图片资源,当你想设置预览文本或者预览图片时,若是不想本身去定义,直接引用这些系统预置的字符串和图片就能够了 |
取值说明 | 参考下表 |
属性值 | 说明 |
---|---|
@tools:sample/full_names |
Full names that are randomly generated from the combination of @tools:sample/first_names and@tools:sample/last_names . |
@tools:sample/first_names |
Common first names. |
@tools:sample/last_names |
Common last names. |
@tools:sample/cities |
Names of cities from across the world. |
@tools:sample/us_zipcodes |
Randomly generated US zipcodes. |
@tools:sample/us_phones |
Randomly generated phone numbers with the following format: (800) 555-xxxx . |
@tools:sample/lorem |
Placeholder text that is derived from Latin. |
@tools:sample/date/day_of_week |
Randomized dates and times for the specified format. |
@tools:sample/date/ddmmyy |
|
@tools:sample/date/mmddyy |
|
@tools:sample/date/hhmm |
|
@tools:sample/date/hhmmss |
|
@tools:sample/avatars |
Vector drawables that you can use as profile avatars. |
@tools:sample/backgrounds/scenic |
Images that you can use as backgrounds. |
示例代码:
在下面的预览图中,图标和文本都是直接引用的系统预置的。
下面这些属性,可让咱们在 资源压缩时肯定哪些资源能够保留或者丢弃,也可让咱们开启严格模式的资源引用检查。 The following attributes allow you to enable strict reference checks and declare whether to keep or discard certain resources when using resource shrinking
开启资源压缩时,在 module 的build.gradle 文件做以下修改:
android {
buildTypes {
release {
shrinkResources true //开启资源压缩。minifyEnabled 也必须为true,不然编译不经过
minifyEnabled true //开启代码混淆/压缩
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
复制代码
. | 说明 |
---|---|
应用范围 | <resources> |
做用对象 | 开启了资源压缩的构建工具Build tools with resource shrinking |
具体做用 | 指明 构建工具在压缩资源时使用哪一种模式:safe mode 、strict mode |
取值说明 | safe、strict |
模式 | 说明 |
---|---|
safe | 保留被显示引用的,或者可能经过Resources.getIdentifier()被动态引用的资源 |
strict | 保留 resources 或者 代码中 被显示引用的资源 |
默认是 safe 模式 (即shrinkMode="safe"
). 若是想使用 strict 模式,须要在<resources>节点中显示声明 shrinkMode="strict"
,具体以下:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:shrinkMode="strict" />
复制代码
开启 strict 模式以后, 可使用 tools:keep
保留那些你不想被移除的资源, 或者使用tools:discard
直接移除资源
. | 说明 |
---|---|
应用范围 | <resources> |
做用对象 | 开启了资源压缩的构建工具 |
具体做用 | 使用资源压缩去移除未被使用的资源时,该属性将容许你指明哪些资源能够被保留(好比一些经过Resources.getIdentifier() 间接引用的资源) |
取值说明 | 资源文件的引用 |
使用时,在 resources 目录下建立一个 xml 文件并指定名称,如:res/raw/keep.xml
。建立一个<resources>
节点,并为tools:keep
赋值,其值表明将被保留的资源,多个资源之间使用逗号间隔,也可使用 * 做为通配符,示例以下:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@layout/used_1,@layout/used_2,@layout/*_3" />
复制代码
. | 说明 |
---|---|
应用范围 | <resources> |
做用对象 | 开启了资源压缩的构建工具 |
具体做用 | |
取值说明 |
当使用资源压缩工具去除一些无用资源时,使用该属性能够指明一些须要手动删除的资源 (好比:被引用了可是未能生效的资源,或者 Gradle 插件误引用了某些资源被引用).
使用时,在 resources 目录下建立一个 xml 文件并指定名称,如:res/raw/keep.xml
。建立一个<resources>
节点,并为tools:keep
赋值,其值表明将被保留的资源,多个资源之间使用逗号间隔,也可使用 * 做为通配符,示例以下:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:discard="@layout/unused_1" />
复制代码
tools 命名空间的官方文档:
developer.android.google.cn/studio/writ…
命名空间介绍:
blog.csdn.net/p106786860/…
注解参考:
developer.android.google.cn/studio/writ…
lint 参考:
developer.android.google.cn/studio/writ…
资源压缩shrink-resources
:
developer.android.com/studio/buil…
本文到此结束,谢谢观看!
若有不足,敬请指正!