android中xml tools属性详解

第一部分

安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果。

但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了text。因此为了在ide中预览效果,你必须在xml中为TextView控件设置android:text属性


1

2

3

4

5

6

7

<TextView

  android:id="@+id/text_main"

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:textAppearance="@style/TextAppearance.Title"

  android:layout_margin="@dimen/main_margin"

  android:text="I am a title" />

一般我们在这样做的时候都告诉自己,没关系,等写完代码我就把这些东西一并删了。但是你可能会忘,以至于在你的最终产品中也会有这样的代码。

用tools吧,别做傻事

以上的情况是可以避免的,我们使用tools命名空间以及其属性来解决这个问题。


1

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

tools可以告诉Android Studio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。比如我们要让android:text属性只在布局预览中有效可以这样


1

2

3

4

5

6

7

<TextView

 android:id="@+id/text_main"

 android:layout_width="match_parent"

 android:layout_height="wrap_content"

 android:textAppearance="@style/TextAppearance.Title"

 android:layout_margin="@dimen/main_margin"

 tools:text="I am a title" />

tools可以覆盖android的所有标准属性,将android:换成tools:即可。同时在运行的时候就连tools:本身都是被忽略的,不会被带进apk中。

tools属性的种类

tools属性可以分为两种:一种是影响Lint提示的,一种是关于xml布局设计的。以上介绍的是tools的最基本用法:在UI设计的时候覆盖标准的android属性,属于第二种。下面介绍Lint相关的属性。

Lint相关的属性


1

2

3

tools:ignore

tools:targetApi

tools:locale

tools:ignore

ignore属性是告诉Lint忽略xml中的某些警告。

假设我们有这样的一个ImageView


1

2

3

4

5

6

7

<ImageView

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:layout_marginStart="@dimen/margin_main"

  android:layout_marginTop="@dimen/margin_main"

  android:scaleType="center"

  android:src="@drawable/divider" />

Lint会提示该ImageView缺少android:contentDescription属性。我们可以使用tools:ignore来忽略这个警告:


1

2

3

4

5

6

7

8

<ImageView

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:layout_marginStart="@dimen/margin_main"

  android:layout_marginTop="@dimen/margin_main"

  android:scaleType="center"

  android:src="@drawable/divider"

  tools:ignore="contentDescription" />

tools:targetApi

假设minSdkLevel 15,而你使用了api21中的控件比如RippleDrawable


1

2

<ripple xmlns:android="http://schemas.android.com/apk/res/android"

  android:color="@color/accent_color" />

则Lint会提示警告。

为了不显示这个警告,可以:


1

2

3

4

<ripple xmlns:android="http://schemas.android.com/apk/res/android"

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

  android:color="@color/accent_color"

  tools:targetApi="LOLLIPOP" />

tools:locale(本地语言)属性

默认情况下res/values/strings.xml中的字符串会执行拼写检查,如果不是英语,会提示拼写错误,通过以下代码来告诉studio本地语言不是英语,就不会有提示了。


1

2

3

4

5

6

7

8

<resources

  xmlns:android="http://schemas.android.com/apk/res/android"

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

  tools:locale="it">

 

  <!-- Your strings go here -->

 

</resources>

这篇文章首先介绍了tools的最基本用法-覆盖android的属性,然后介绍了忽略Lint提示的属性。下篇文章中,我们将继续介绍关于UI预览的其他属性(非android标准属性)。

ps:关于忽略Lint的属性,如果不想了解的话也没关系,因为并不影响编译,一般我都不会管这些警告。

第二部分

这部分我们将继续介绍关于UI预览的其他属性(非android标准属性)。

  • tools:context
  • tools:menu
  • tools:actionBarNavMode
  • tools:listitem/listheader/listfooter
  • tools:showIn
  • tools:layout

tools:context

context属性其实正是的称呼是activity属性,有了这个属性,ide就知道在预览布局的时候该采用什么样的主题。同时他还可以在android studio的java代码中帮助找到相关的文件(Go to Related files

该属性的值是activity的完整包名


1

2

3

4

5

6

7

8

9

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

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

  android:id="@+id/container"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:orientation="vertical"

  tools:context="com.android.example.MainActivity">  <!-- ... -->

</LinearLayout>

tools:menu

告诉IDE 在预览窗口中使用哪个菜单,这个菜单将显示在layout的根节点上(actionbar的位置)。

其实预览窗口非常智能,如果布局和一个activity关联(指上面所讲的用tools:context关联)它将会自动查询相关activity的onCreateOptionsMenu方法中的代码,以显示菜单。而menu属性则可以覆盖这种默认的行为。

你还可以为menu属性定义多个菜单资源,不同的菜单资源之间用逗号隔开。


1

tools:menu="menu_main,menu_edit"

如果你不希望在预览图中显示菜单则:


1

tools:menu=""

最后需要注意,当主题为Theme.AppCompat时,这个属性不起作用。

tools:actionBarNavMode

这个属性告诉ide  app bar(Material中对actionbar的称呼)的显示模式,其值可以是


1

2

3

standard

tabs

list


1

2

3

4

5

6

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

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

    android:orientation="vertical"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:actionBarNavMode="tabs" />

同样的,当主题是Theme.AppCompat (r21+, at least) 或者Theme.Material,或者使用了布局包含Toolbar的方式。  该属性也不起作用,只有holo主题才有效。

listitem, listheader 和listfooter 属性

顾名思义就是在ListView ExpandableListView等的预览效果中添加头部 尾部 以及子item的预览布局。


1

2

3

4

5

6

7

<GridView

 android:id="@+id/list"

 android:layout_width="match_parent"

 android:layout_height="wrap_content"

 tools:listheader="@layout/list_header"

 tools:listitem="@layout/list_item"

 tools:listfooter="@layout/list_footer" />

layout属性

tools:layout告诉ide,Fragment在程序预览的时候该显示成什么样


1

2

3

4

5

6

7

8

9

<fragment xmlns:android="http://schemas.android.com/apk/res/android"

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

    android:id="@+id/item_list"

    android:name="com.example.fragmenttwopanel.ItemListFragment"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_marginLeft="16dp"

    android:layout_marginRight="16dp"

    tools:layout="@android:layout/list_content" />

tools:showIn

该属性设置于一个被其他布局<include>的布局的根元素上。这让您可以指向包含此布局的其中一个布局,在设计时这个被包含的布局会带着周围的外部布局被渲染。这将允许您“在上下文中”查看和编辑这个布局。需要 Studio 0.5.8 或更高版本。

时间: 2024-10-11 01:19:09

android中xml tools属性详解的相关文章

android中xml tools属性详解(转)

第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了text.因此为了在ide中预览效果,你必须在xml中为TextView控件设置android:text属性 1 2 3 4 5 6 7 <TextView   android:id="@+id/text_main"   android:layout_width="matc

android中xmlns:tools属性详解

第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了text.因此为了在ide中预览效果,你必须在xml中为TextView控件设置android:text属性 <TextView android:id="@+id/text_main" android:layout_width="match_parent" and

Android逆向之旅---Android中的sharedUserId属性详解

一.前言 今天我们来看一下Android中一个众人熟悉的一个属性:shareUserId,关于这个属性可能大家都很熟悉了,最近在开发项目,用到了这个属性,虽然知道一点知识,但是感觉还是有些迷糊,所以就写篇文章来深入研究一下. 关于Android中的sharedUserId的概念这里就简单介绍一下: Android给每个APK进程分配一个单独的空间,manifest中的userid就是对应一个分配的Linux用户ID,并且为它创建一个沙箱,以防止影 响其他应用程序(或者其他应用程序影响它).用户I

Android中的windowSoftInputMode属性详解

如何实现软键盘不自动弹出,使用的方法是设置android:windowSoftInputMode属性.那么,这个属性到底是干什么的,他有什么作用呢?今天这篇文章,就是探索android:windowSoftInputMode属性的作用的. 首先,我们从这个属性的名称中,可以很直观的看出它的作用,这个属性就是来设置窗口软键盘的交互模式的. android:windowSoftInputMode属性一共有9个取值,分别是: stateUnspecified,stateUnchanged,stateH

Android TextView和EditText属性详解

TextView属性详解: autoLink设置 是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/map/all) android:autoText如果设置,将 自动 执行输入值的拼写纠正.此处无 效果 ,在显示输入法并输入的时候起作用. android:bufferType指定getText()方式取得的文本类别.选项editable 类似于StringBuilder可追加字符,也就是说getText后可调用

Android开发之EditText属性详解

1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以"."形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码. editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设

【转】 Android开发之EditText属性详解

原文网址:http://blog.csdn.net/qq435757399/article/details/7947862 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码. editText.setTransformationMe

Android中图片压缩方案详解

如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避免程序OOM.还有一个问题就是图片的上传下载问题,往往我们都喜欢图片既清楚又占的内存小,也就是尽可能少的耗费我们的流量,这就是我今天所要讲述的问题:图片的压缩方案的详解. 1.质量压缩法 设置bitmap options属性,降低图片的质量,像素不会减少 第一个参数为需要压缩的bitmap图片对象,

android中include标签使用详解

android中include标签是为了便于控件的覆用的一个很好解决方案. 但是也有一些需要注意的地方,下面是本人在项目中碰到过的一个问题,做此记录,便于以后查看. include标签用法. 1.新建一个xml文件,命名 head.xml head.xml文件内容如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.