是时候让 Android Tools 属性拯救你了

日常开发过程中,我们都会遇到这样一种场景:我们写出的 UI 效果在对接数据之前需要提前进行预览,进而调整 UI 细节和排版问题。我们一般的做法是什么样的?如果存在像 TextView 或者 ImageView 这种基础控件,你是不是还在通过诸如 android:text="xxx" 和 android:src="@drawable/xxx" 的方式来测试和预览UI效果?当然你肯定也会遇到这些“脏...
摘要由CSDN通过智能技术生成

日常开发过程中,我们都会遇到这样一种场景:我们写出的 UI 效果在对接数据之前需要提前进行预览,进而调整 UI 细节和排版问题。我们一般的做法是什么样的?如果存在像 TextView 或者 ImageView 这种基础控件,你是不是还在通过诸如 android:text="xxx"android:src="@drawable/xxx" 的方式来测试和预览UI效果?当然你肯定也会遇到这些“脏数据”让你带来的困扰:测试的时候某些地方出现了本不该出现的数据,事后可能一拍脑门才发现,原来是布局中控件预览数据没有清除导致的。如果是 RecyclerView,在后台接口尚能测试的情况下,你是否又要自己生成“假数据”并手写 Adapter 呢?这时候你不禁会问:有没有一种方法,既能够做到布局时预览数据方便排版,又能够在对接真实数据运行后动态替换和移除这些无关数据呢?

铛铛铛铛!Android 的 Tools attributes 应运而生。老规矩,我们先来看一个效果:

最终效果图

What?你在耍我吗?这么简单的列表拿出来干嘛?哈哈,客观不要着急。这个并不难实现,倘若我说这里并没有写一行 Java 或者 Kotlin 代码就实现了此效果,而只是在布局页面预览,你敢信吗?上图只是冰山一角,下面这张图才是全貌:

最终效果图全貌

下面会带大家一步步实现上述功能,首先,让我们从头说起。

认识 Tools attributes

Tools attributes 即以 tools 开始的命名空间,举个我们最常见到的例子:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
</android.support.constraint.ConstraintLayout>

大家肯定平时都会见到 tools:context=".XXXActivity 这个系统默认为我们生成的配置。一般来说,只有根视图才能使用这个属性,它指定了当前布局默认是与哪个 Activity 相关联,使得布局能够获取到绑定 Activity 的一些信息,比如 Theme 等等,而且当你在布局中给子 View 添加 onClick 事件时,相应的方法代码会插入到这个 Activity 中。
Android studio 支持很多在 XML 文件中以 tools 为命名空间的属性,当构建 App 时这些属性会被擦除,对 APK 的大小和运行时行为没有任何影响,这也就是我们文章最初想要的结果。

细说 Tools attributes

在具体介绍 Tools attributes 之前,我们需要先了解如何引入 Tools 的命名空间并使用,很简单,只需要在 XML 布局文件的根元素中添加即可:

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

这些工具属性大概可以分为以下三类:

Error handling attributes

错误和警告处理属性。这类属性常被用来规避被 lint 检查出的一些错误提示以及警告。下面让我们看一些常见的例子:

  • tools:ignore

    主要用来忽略一些 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>
    

    这个对于 Android studio 升级到 3.0 以上的小伙伴来说应该是很常见了,如果我们项目中涉及到国际化支持,那么编译器就会提示我们为每一种语言做适配,不能“厚此薄彼”,如果我们某些 string 只需要支持一种语言,只需要像上面那样添加 tools:ignore="MissingTranslation 即可。相似的例子还可以在使用 ImageView 的时候看到:

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

    这个属性的功能和 Java 代码中的注解 @TargetApi 是一样的:它指定了当前控件或元素支持的 API 级别,属性值可以是 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"/>
    
  • tools:locale

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

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

Resource shrinking attributes

资源压缩属性。关于此类属性的用法我们已经在之前的一篇文章带你领略Android混淆的魅力一文中做过详细讲解,下面再简单说明一下。

我们可以通过 tools:shrinkModetools: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" />

下面就到本篇文章的重头戏了,注意,前方高能来袭!

Design-time View Attributes

这就是我们先前效果图中的重要功臣了,即:布局设计时的控件属性。这类属性主要作用于 View 控件,如上文所说的 tools:context 就是“成员”之一,下面我们来介绍其他重要成员。

在此之前,我们需要先揭开 tools 命名空间的另一层神秘面纱:tools: 可以替换任何以 android: 为前缀的属性,并为其设置样例数据sample data)。当然,正如我们前面所说,tools 属性只能在布局编辑期间有效,App真正运行后就毫无意义了,所以,我们就可以像下面这样来在运行前预览布局效果

预览item布局效果

上图对应的布局文件为:

Card_item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@android:color/white"
        android:clickable="true"
        android:focusable="true"
        android:foreground="?attr/selectableItemBackground"
        android:layout_width="match_parent"
        android:layout_height="
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 作为AI,我无法访问您的设备或操作系统,因此无法确定您的具体问题。您可能需要提供更多细节或错误消息以便我能够为您提供更好的帮助。同时,您可以在Android开发者网站上寻找相关文档和资源,或者联系技术支持人员以获取帮助。 ### 回答2: Android tools是一种用于开发Android应用程序的工具集。如果无法安装Android tools,可能是因为以下几个原因。 首先,可能是由于操作系统的兼容性问题导致无法安装。Android tools通常需要在特定版本的操作系统上安装,如果你的系统不兼容,那么安装就会失败。此时,你可以尝试更新操作系统或者查找适用于你操作系统版本的其他版本的Android tools。 其次,可能是由于网络问题导致无法下载或安装Android tools。有时候,下载安装包需要在稳定的网络环境下进行,如果网络不稳定或者下载服务不可访问,那么安装就可能会失败。此时,你可以尝试在其他网络环境下安装或者稍后再试。 还有可能是由于系统设置的限制导致无法安装Android tools。有些操作系统会设置安装限制,只允许从特定来源或者授信的开发者处安装应用程序。如果你的系统有此类限制,并且Android tools不在安装列表中,那么你需要修改系统设置以允许从其他来源进行安装。 最后,如果你尝试了以上方法仍然无法安装Android tools,那么可能是安装包本身存在问题。你可以尝试从官方渠道重新下载合法的Android tools安装包,或者寻求技术支持以解决问题。 总结来说,无法安装Android tools可能是由于操作系统兼容性、网络问题、系统设置限制或者安装包问题导致的。根据具体情况,你可以尝试不同的解决方法来解决该问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值