热门标签 | 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 官方文档中了解更多信息。


推荐阅读
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
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社区 版权所有