Android Tools Attributes,让布局设计所见即所得

2024-06-03 12:38

本文主要是介绍Android Tools Attributes,让布局设计所见即所得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2016-10-13 亦枫 技术鸟 技术鸟
技术鸟

NiaoTech

上谈【安卓】,下论【苹果】。以扯淡的态度,面对操蛋的技术,用幽默的语言,诠释开发的经典。



回复1024 随机给你一个惊喜


开发人员在设计Android Layout布局时,总会伴随着一些乱七八槽的困扰。比如,为了更加逼真的真实数据预览效果,我们在开发时会将TextView的text属性写上一些假数据,而当运行到模拟器或真机上时这些假数据就成了造成体验上甚至测试BUG的脏数据,又需要一一清除。再比如,我们想在XML的预览界面上就看到ListView的Item内容,而不是只有通过编译运行时才能查看。等等,诸如这些存在于开发Layout内容阶段的困扰,都可以通过Tools Attributes得以解决,不妨了解一下。

xmlns 定义

Android提供了一种特殊的tools命名空间,来帮助开发人员在开发Layout布局时使用tools属性解决实时预览等问题。这种属性在应用打包运行时将会被忽略,不产生任何影响。tools命名空间的URI为:http://schemas.android.com/tools,通常可将其定义在Layout的根容器中(在Android Studio中,可利用Live Temples快捷方式,输入toolsNs即可对应提示),如:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"></RelativeLayout>

这里将Tools Attributes按照功能分为两种类别,一种是去除Lint提示的,一种是展示布局预览的,下面一一介绍相关属性的使用。

Lint 提示

tools:ignore

这个属性用于告诉Android Lint忽视某些xml警告,比如平时使用ImageView的时候都要加上这么一句:android:contentDescription="@null",否则便会出现黄色警告:[Accessibility] Missing contentDescription attribute on image,此时就可以使用tools:ignore属性忽视这个警告:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="contentDescription"/>

tools:targetApi

类似Java代码中的@TargetApi注解一样,指定API级别,可以使用数字level,也可以直接用API name,比如elevation属性只能在API 21及更高版本使用,使用tools:targetApi属性可以忽视版本的警告:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:targetApi="LOLLIPOP"/>

tools:locale

指定IDE当前的假定本地语言,可用在资源文件的根元素上,比如用在values/strings.xml上,避免一些拼写语法上的检查:

<resources xmlns:tools="http://schemas.android.com/tools"
    tools:local="es"><!-- string --><string name="name">nombre</string></resources>

布局预览

这里也分为两种,一种是替换标准的android命名空间的控件固有属性,举个例子:

<TextView
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="Samples"/>

上例中使用tools:text替换了android:text标准属性,在design窗口预览时可以看到TextView的text内容,而运行时则会被忽略。诸如此类,其他android标准属性均可被替换以达到预览效果。另一种就是非android标准属性了,下面一一说明。

tools:context

这个属性用在layout文件的根元素上,指明与当前layout相关联的Activity,从而在预览时使用Activity的主题(theme一般定义在Manifest文件中并且与activities联系在一起,而非layout)。可以使用Activity的全名,也可以利用manifest中定义的包名作为前缀:

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

tools:layout

这个属性主要用于标签中,指定预览时用的layout布局文件内容:

<fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout="@layout/fragment_content"/>

tools:listitem/listheader/listfooter

顾名思义,这三个属性可用于诸如ListView、GridView、ExpandableListView等AdapterView的子类中,实现内容布局的预览。注意:经实践,在Android Studio中已经无法达到这些元素的内容预览效果,但tools:listitem属性可以用在RecyclerView中,比如:

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@android:layout/simple_list_item_checked"/>

RecyclerView使用tools:listitem的前后对比预览效果如下:


tools:showIn

这个属性用在标签所包含的layout的根元素上,指定一个所在的布局文件,这样在被嵌套的layout的design视图中便可以预览到外层的layout内容。比如在activity_main.xml中使用<include>标签嵌套一个include_content.xml文件,那么在include_content.xml文件的根元素中就可以使用tools:showIn属性指定Outer layout,达到在include_content.xml文件中预览activity_main.xml内容的效果:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="@layout/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></RelativeLayout>

tools:menu

这个属性用在layout根元素中,指定layout预览时ActionBar展示的menu内容。使用tools:context属性时,ActionBar会自动查找Activity中的onCreateOptionsMenu()方法预览menu,tools:menu属性的设置会覆盖tools:context属性的效果。tools:menu的值只需要使用menu文件的名字即可,多个menu使用逗号隔开,如

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:menu="menu1,menu2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></RelativeLayout>

tools:actionBarNavMode

这个属性用在layout根元素中,指定layout预览时ActonBar的导航模式,值有standard、list和tabs三种,如:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:actionBarNavMode="standard"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></RelativeLayout>

ActionBar不同navigation mode下的预览效果如图所示,关于navigation mode的相关信息可参考Top Level Switching With View Controls


tools:shrinkMode/keep/discard

为了使APK文件尽可能地变小,一般在打包发布时会开启Shrink Code和Shrink Resources的功能,删除项目中无用的代码和资源,使用这三个属性可以指定某些resources的保留与删除,具体信息可以参考官网介绍:Shrink Your Code and Resources

官方参考

以上便是笔者对于Android Tools Attributes的一些理解和实践,英文较好的也可以直接参考官方介绍,地址如下:

http://tools.android.com/tech-docs/tools-attributes


热门推文

Android 利用Gradle实现app的环境分离

Android Studio 使用Gradle引入第三方库文件的总结

ADB Idea,图形化界面,让ADB命令更简单一点

这「非常7+1」条小贴士,助你Coding水平再提一阶!

推荐|一张思维导图,告诉你Android新手如何快速入门




阅读原文 进入【YiFeng ' Zone】

重在分享,随心而赏~

赞赏

人赞赏

阅读原文

这篇关于Android Tools Attributes,让布局设计所见即所得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027011

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)