Android开发之——Tools属性

一 前言

我们先看一张效果图片:协调布局ConstrainLayout中只有一个RecycleView,但是却显示出了数据列表。原因是什么呢?看完本文讲述的Android:Tools一些属性后,你就会明白

二 Android:Tools是啥?

  • 再讲Android Tools之前,先看下什么是命名空间

2.1 命名空间

2.1.1 定义

  • namespace即“命名空间”,也称“名称空间” 、”名字空间”。VS.NET中的各种语言使用的一种代码组织的形式 通过名称空间来分类,区别不同的代码功能 同时也是VS.NET中所有类的完全名称的一部分。百度百科

    2.1.2 命名空间作用

  • 提供避免元素命名冲突的方法,里面存放的是特性属性的集合;
  • 如:android:text和tools:text代表两个不同的属性

2.1.3 命名空间分类

在Android中的命名空间可分为3种,如下:

2.2 Android:Tools

Android Tools属性,能够在布局运行到手机前预览效果,不会污染真实请求后数据的显示。并且在构建应用程序时,构建工具会删除这些属性,这样就不会对APK大小或运行时行为产生影响。有三个主要功能:

  • 布局错误处理
  • 预览
  • 资源压缩

三 Tools功能详解

3.1 布局文件错误处理属性

3.1.1 tools:ignore

  • 作用:让Lint 工具在检查代码时忽略指定的错误。
  • 取值: tools:ignore=”ContentDescription”
  • 示例:
    • 处理前:
    • 处理后:

3.1.2 tools:targetApi

  • 作用: 指明某个控件只在指定的API 及更高的版本中生效
  • 取值:API 版本号对应的 int值
  • 示例:RippleDrawable 水波纹(res\drawable\ripple_1.xml)
    • 处理前:
    • 处理后:

3.1.3 tools:locale

  • 作用: 指明 resources 中元素的语言类型
  • 示例
     
    复制
    1
    2
    
    <resources xmlns:tools="http://schemas.android.com/tools"
      tools:locale="zh">
    

3.2 视图预览相关属性

  • 以下属性在xml中定义之后,只在预览时会展示,正式部署之后并不会展示

3.2.1 用 tools:xxxx 替代 android:xxxx,只在预览时有效

  • 作用对象:View
  • 作用:将view的任意属性值的 android 前缀替换为 tools 之后,就可以实现预览效果
  • 取值范围:具体取值以view的属性取值为准
  • 示例:tools:text,tools:visibility等
    • 预览时:
    • 真实显示:

3.2.2 tools:context

  • 作用对象:layout

  • 作用:声明该布局文件默认关联的 activity、

  • 取值说明:与layout关联的activity的全路径

  • 示例:

    • tools:context

      复制
      1
      2
      3
      4
      
      <android.support.constraint.ConstraintLayout
          		xmlns:android="http://schemas.android.com/apk/res/android"
          		xmlns:tools="http://schemas.android.com/tools"
          		tools:context=".MainActivity" >
      
    • tools关联的点击提示

3.2.3 tools:itemCount

  • 作用对象:

  • 作用:在 节点中设置该属性之后,会指定在预览界面中绘制/展示几个条目

  • 取值说明:int 类型数值

  • 示例:

    • tools:itemCount

      复制
      1
      2
      3
      4
      5
      
      <android.support.v7.widget.RecyclerView
         android:id="@+id/recyclerView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:itemCount="3"/>
      
    • 预览效果

3.2.4 tools:layout

  • 作用对象:

  • 作用:声明在预览时将哪个布局文件填充到该Fragment

  • 取值说明:布局id 的引用值

  • 示例:

    • tools:layout

       
      复制
      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      <fragment
        android:id="@+id/fragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout="@layout/layout_profile_list" />
      
    • 预览效果

3.2.5 tools:listitem 、 tools:listheader 、 tools:listfooter

  • 作用对象: 及其子类,如

  • 作用:在预览界面显示列表、表头、表尾

  • 取值说明:布局文件的引用

  • 示例:

    • tools:listitem 、tools:listheader 、tools:listfooter

       
      复制

      xmlns:android

      1
      2
      3
      4
      5
      6
      7
      
      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/item_profile"
      tools:listheader="@layout/sample_list_header"
      tools:listfooter="@layout/sample_list_footer" />
      
    • 预览效果

3.2.6 tools:showIn

  • 作用对象:布局文件的根节点

  • 作用:声明该布局文件将会被哪个布局通过 引用。

  • 注意事项:声明之后,在对应的文件中不要忘了用 引用

  • 示例:

    • 声明:

      复制
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
      <TextView xmlns:android="http://schemas.android.com/apk/res/android"
      	 xmlns:app="http://schemas.android.com/apk/res-auto"
      	 xmlns:tools="http://schemas.android.com/tools"
      	 android:id="@+id/ratingTextView"
      	 android:layout_width="match_parent"
      	 android:layout_height="match_parent"
      	 android:textColor="@color/colorPrimary"
      	 android:gravity="center"
      	 app:layout_constraintBottom_toBottomOf="parent"
      	 app:layout_constraintLeft_toLeftOf="parent"
      	 app:layout_constraintRight_toRightOf="parent"
      	 app:layout_constraintTop_toTopOf="parent"
      	 tools:showIn="@layout/activity_main"
      	 tools:text="Header" />
      
  • 引用(activity_main)

    复制
    1
    
    <include layout="@layout/sample_list_header"/>
    

3.2.7 tools:menu

  • 作用对象:布局文件的根节点、
  • 作用:声明在预览界面中 AppBar 将展示哪些菜单
  • 取值:直接填写res/menu/xxx的名字,不需要填写前缀: @menu/或者后缀.xml
  • 示例:
    • munu菜单(tools:menu下显示红色不知为何,但运行到手机里面时没有错误)

    • 预览布局

3.2.8 tools:minValue / tools:maxValue

  • 作用对象:

  • 作用:为NumberPicker 设置预览时的最小值和最大值

  • 取值:int 型数值

  • 示例

    • 代码

       
      复制
      1
      2
      3
      4
      5
      6
      7
      
      <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="1"
          tools:maxValue="10" />
      
    • 预览

3.2.9 tools:openDrawer

  • 作用对象:

  • 作用:在预览界面中将 DrawerLayout 打开

  • 取值:end、left、right、start

  • 注意事项:tools:openDrawer 的取值必须与侧拉窗口的 layout_gravity 的取值一致

  • 示例:

    • 代码

      复制
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      
      <android.support.v4.widget.DrawerLayout 		xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       	   android:id="@+id/drawer_layout"
       	   android:layout_width="match_parent"
       	   android:layout_height="match_parent"
       	  tools:openDrawer="start">
       	  
       		<TextView
         		android:layout_width="match_parent"
         		android:layout_height="match_parent"
         		android:gravity="center"
         		tools:background="@color/colorAccent"
         		tools:text="主内容" />
       
       		<TextView
         		android:layout_width="50dp"
         		android:layout_height="match_parent"
         		android:layout_gravity="start"
         		android:gravity="center"
         		tools:background="#ff00ff"
         		tools:text="侧拉" />
       
      	</android.support.v4.widget.DrawerLayout>
      
    • 预览

3.2.10 “@tools:sample/*” resources

  • 作用对象:支持text文本或者image的view控件

  • 作用:为View设置占位文本或图片

  • 取值:

    属性值占位符数据说明
    @tools:sample/full_names随机组合生成的全名。@tools:sample/first_names@tools:sample/last_names.
    @tools:sample/first_names普通的名字
    @tools:sample/last_names普通姓氏
    @tools:sample/cities来自世界各地的城市名称
    @tools:sample/us_zipcodes随机生成的美国邮政编码
    @tools:sample/us_phones随机生成的电话号码格式如下:(800) 555-xxxx.
    @tools:sample/lorem从拉丁文派生的占位符文本
    @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可用作背景的图像
  • 示例

    • 布局

      复制
      1
      2
      3
      4
      5
      6
      7
      8
      
      <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           app:layout_constraintStart_toStartOf="parent"
           app:layout_constraintTop_toTopOf="parent"
           android:gravity="center"
           tools:text="@tools:sample/full_names"
           tools:drawableLeft="@tools:sample/avatars"/>
      
    • 预览

3.3 资源压缩属性

  • 打包输出时,可以进行资源压缩,在 module 的build.gradle 文件作如下修改
     
    复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    android 
    	{
        	buildTypes 
    		{
            release {
                	shrinkResources true
                	minifyEnabled true
                	proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
            			}
        		}
    		}
    

3.3.1 tools:shrinkMode

  • 作用对象:
  • 作用:开启了资源压缩的构建工具
  • 取值:safe(安全模式)、strict(严格模式)
模式说明
safe保留被显示引用的,或者可能通过Resources.getIdentifier()被动态引用的资源
strict保留 resources 或者 代码中 被显示引用的资源
  • 示例(在res/raw/keep.xml中配置tools:shrinkMode)

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

3.3.2 tools:keep

  • 作用对象:

  • 作用:使用资源压缩去移除未被使用的资源时,该属性将允许你指明哪些资源可以被保留

  • 示例(res/raw/keep.xml)

    复制
    1
    2
    3
    
    <?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" />
    

3.3.3 tools:discard

  • 作用对象:

  • 作用:当使用资源收缩删除未使用的资源时,此属性允许您指定要手动丢弃的资源

  • 示例(res/raw/keep.xml)

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

四 参考

Android总结:命名空间
Tools attributes reference
Android:Tools命名空间原来是有大用处的
Android 冷兵器 之 tools
是时候让 Android Tools 属性拯救你了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值