热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

你是不是也忽略了xml里面的tools命名空间

一创建一个布局文件的时候可能都有这么一句:xmlns:toolshttp:schemas.android.comtools基础认识可是这个tools的命名空间有什么属性有什

一创建一个布局文件的时候可能都有这么一句:

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

基础认识

可是这个tools的命名空间有什么属性有什么作用呢,相信很多人都忽略了它的存在。它主要用在项目开发阶段而不会影响用户体验,用在Design界面渲染而不会影响运行时的界面。

有时这些巧妙的属性会节约我们的构建时间。我并不是说会加快构建速度,而是构建相关的 UI 改变会减少。

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

当然这个tools你可以改成其它,只要他能代表这个命名空间就可以。该属性的所有属性都不会影响apk的大小或运行时,它们会在Gradle打包应用时被分离出去。
以前在做andorid开发时,为了直观的查看布局经常在TextView里面用android:text=”“来添加测试字符串,然而这样做就会让我们apk中包含没有用的资源和渲染成本。有这个tools我们可以用tools:text=”“,这样就会在设计渲染时显示出来而不在运行时显示。
我们可以同时使用android和tools命名空间。tools命名空间将会用在设计阶段而前者会用在运行时。
有时候你希望在运行时开启而有设计时关闭。Android文档展示了ListView的例子:

<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fastScrollAlwaysVisible="true"
tools:fastScrollAlwaysVisible=""/>

这里表示:有运行时开启了fastScrollAlwaysVisible 功能,而在设计时关闭了它。
你可以覆盖所有已存在的android命名空间的属性,但无法覆盖自定义属性。

在xml中指定目标API版本

你可以在xml中指定API版本,就像在java代码中使用@TargetApi一样。API版本可以通过一个整形或它的代号指定。这可以用来避免特定XML属性的问题。比如:

<TextView
tools:text="Mastering ToolsNs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:layout_height="match_parent"
tools:targetApi="M"
/>

告诉Lint你的字符串资源是正确的

由于AndroidStudio/Lint默认语言是英语,如果你有其它语言的字符串资源,它将会显示排版警告。
告知Lint你本地化资源的技巧:

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

这样做了之后就不会显示排版警告了。

在Fragment和自定义视图上预览布局

在使用Fragment和自定义视图时非常有用。通过tools:layout="@layout/your_layout",你可以设置在预览窗口显示一个布局。

    xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:cOntext=".MainActivity"
>

android:name="com.alexsimo.mastertoolsnamespace.BooksFragment"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"wrap_content"
tools:layout="@layout/fragment_books"
/>

</LinearLayout>

上述代码使用了 tools:layout 属性来预览 BooksFragment 布局,而不用将工程运行在设备或模拟器上来查看效果。是不是觉得很方便呢?

关联xml到activity上

当我们用AndroidStudio创建一个acitivty的时候,在默认生成的xml文件中你会看到tools:cOntext=".MainActivity"。单个xml布局可以用在多个activity或fragment中,使用些属性,你就告诉了AndroidStudio哪个activity与这个xml相关联。
当主题被定义在了AndroidManifest.xml文件之后这个帮助布局编辑器猜测这个activity的主题。

忽略LInt警告

忽略Lint警告不是一个好主意,如果Lint上报问题,你应该行动起来并修复错误和警告,但有时Lint给出的是错误警告,我们明确知道(may be not)我们在做什么,这种情况下你可以用使用tool:ignore=""
如果我们的外层布局没有存在的意义的时候:

 <LinearLayout
android:id="@+id/fullscreen_content_controls"
style="?buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:background="@color/black_overlay"
android:orientation="horizontal"
tools:ignore="UselessParent" >


<Button
android:id="@+id/dummy_button"
style="?buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/dummy_button" />

LinearLayout>

可以用tools:ignore="UselessParent" 来忽略警告。

带菜单预览布局

默认情况下,定义在 Activity.onCreateOptionsMenu() 中的菜单会被渲染到预览窗口。但你可以使用 tools:menu=”comma separated menu IDs” 覆盖此菜单。我个人不会使用该属性,但它可能会对你有用。

设置 Toolbar 导航模式

此属性很简单!使用 tools:actiOnBarNavMode=”standard|list|tabs” 你可以设置 ActivityBar 的导航模式。

Shrink resources(收缩资源)

Android tools 命名空间中有许多关于收缩资源的属性,比如 tools:shrinkMode=”strict|safe”,tools:keep=”@layout|layout_wildcard”,tools:discard=”@layout/unused” 等,但我不准备在此讨论它们,因为本文不是讨论收缩资源的,如果你感兴趣,可以在 Android Studio 官方文档中了解更多信息。


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 在开发app时,使用了butterknife后,在androidStudio打包apk时可能会遇到报错。为了解决这个问题,可以通过打开proguard-rules.pro文件进行代码混淆来解决。本文介绍了具体的混淆代码和方法。 ... [详细]
author-avatar
甜蜜棉羽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有