Android Tools Attributes Reference (译)

363 阅读4分钟
原文链接: blog.csdn.net

官网地址:developer.android.google.cn/studio/writ…
本文地址:blog.csdn.net/jjwwmlp456/…

Android Studio在tools命名空间中支持多种XML属性。当你构建你的应用,构建工具删除会这些属性,所以没有影响你的APK大小或运行时行为。

使用这些属性,需要添加tools命名空间到每个XML文件的根元素,如下所示:

<RootTag xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" >

属性中处理错误

以下属性将帮助抑制lint的警告消息。

tools:ignore

适合:任何元素
用于:Lint检查
这个属性接受一个以逗号分隔的lint问题id,达到忽略这个元素。例如,您可以告诉tools忽略MissingTranslation(缺失某语言的翻译)错误:

<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>

tools:targetApi

适合:任何元素
用于:Lint检查
它的作用与@TargetApi一样。只是用于xml中。
例如,GridLayout在API level 14以上才支持:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:targetApi="14" >

当然,可以直接使用support v7库中的android.support.v7.widget.GridLayout

tools:locale

适合: <resources>
用于:Lint检查、Studio编辑器
在 <resources>中,为了避免拼写检查器的警告,可以使用tools:locale。它的值必须是一个有效的语言环境限定符
例如,在values/strings.xml中,表示默认字符串使用的语言是西班牙语,而不是英语:

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

本文地址:blog.csdn.net/jjwwmlp456/…

设计时的View属性

以下布局中的属性定义,只有在studio布局预览时是可见的。

tools: instead of android:

适合: <View>
用于:Studio Layout编辑器
对任意的View的属性,使用”tools:”前缀,而不是使用”android:”前缀,就能在Layout预览时,看到你想要的效果
例如,在预览时,想看到TextView的text效果:
stone

可以同时使用”tools:”前缀和”android:”前缀来操作同一属性。前者只影响布局时预览效果,后者影响运行时效果。

如下面的例子,会在Layout预览时,隐藏button2:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="First" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Second"
    tools:visibility="invisible"  />

在Layout 预览编辑器中,设计时属性(即仅预览时有效的),旁边都有一个扳手图:
stone

tools:context

适合: 任何 root <View>
用于:Lint 、Studio Layout编辑器
声明该layout默认用在哪个Activity上。那么在Layout编辑预览时,看到layout theme;在onClick时,通过quickfix,能创建对应方法在指定的Activity中。stone
可以使用点前缀的Activity类名,与清单文件中一样(不包括完整的包名称)。例如:

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity" >

tools:layout

适合: <fragment>
用于:Studio Layout编辑器
在<fragment>使用tools:layout,在预览时,就能看到fragment对应的layout:

<fragment android:name="com.example.master.ItemListFragment"
    tools:layout="@layout/list_content" />

tools:listitem / tools:listheader / tools:listfooter

适合: <AdapterView>(和一些类似<ListView>的子view)
用于:Studio Layout编辑器
在预览时,分别指定item、header、

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/sample_list_item"
    tools:listheader="@layout/sample_list_header"
    tools:listfooter="@layout/sample_list_footer" />
   <!--发现有意思的是,官网最后一句是:tools:listitem="@layout/sample_list_footer" —>

这三个属性,在Studio 2.2.2中还是不支持的,2.2.3中修复了

tools:showIn

适合: 被<include>的任意布局中的 root <View>
用于:Studio Layout编辑器
例如,在布局activity_main.xml中,<include>了如下layout,layout中又使用了tools:showIn=”@layout/activity_main”,这时就能在布局预览时,不光看到TextView,还能看到它的外布局activity_main了:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:showIn="@layout/activity_main" />

tools:menu

适合: 任意布局中的 root <View>
用于:Studio Layout编辑器
这个属性指定菜单布局预览应该显示在应用程序栏中。值可以是一个或多个菜单ID,由逗号分隔(没有”@menu/”前缀或”.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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:menu="menu1,menu2" />

本文地址:blog.csdn.net/jjwwmlp456/…

Resource 压缩属性

以下属性允许您启用严格的引用检查和声明,是保留还是丢弃某些资源,前提是启用了资源压缩。在build.gradle中,使用shrinkResources true,来启用资源压缩:

android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}

tools:shrinkMode

适合: <resources>
用于:配置了资源压缩的构建工具
压缩模式。有两个取值:safe,保留所有被明确引用,或可能被 Resources.getIdentifier()动态引用的资源;strict,只保留被代码或其他资源所明确引用的。默认mode为safe。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:shrinkMode="strict" />

tools:keep

适合: <resources>
用于:配置了资源压缩的构建工具

声明保留的资源。可以是 一个以逗号分隔的列表,可以使用*通配符:

<?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" />

tools:discard

适合: <resources>
用于:配置了资源压缩的构建工具
声明丢弃的资源。可以是 一个以逗号分隔的列表,可以使用*通配符:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:discard="@layout/unused_1" />

关于资源压缩详见:压缩代码和资源文档