本文了解一下各资源类型的配置文件的用法、格式以及语法,以更方便的编写相关配置文件。

Brief Summary

  • Animation Resources

    定义预先确定的动画。
    补间(tween)动画保存在 res/anim/ 中,并从 R.anim 类访问。
    帧(frame)动画保存在 res/drawable/ 中,并从 R.drawable 类访问。

  • Color State List Resource

    定义基于视图状态更改的颜色资源。 保存在 res/color/ 中,并从 R.color 类访问。

  • Drawable Resources

    用位图或 XML 定义各种图形。 保存在 res/drawable/ 中,并从 R.drawable 类访问。

  • Layout Resource

    为应用 UI 定义布局。 保存在 res/layout/ 中,并从 R.layout 类访问。

  • Menu Resource

    定义应用菜单的内容。 保存在 res/menu/ 中,并从 R.menu 类访问。

  • String Resources

    定义字符串、字符串数组和复数(并且包括字符串格式和样式)。 保存在 res/values/ 中,并从 R.string、R.array 和 R.plurals 类访问。

  • Style Resource

    定义 UI 元素的外观和格式。 保存在 res/values/ 中,并从 R.style 类访问。

  • Font Resources

    定义字体系列并在 XML 中包含自定义字体。 保存在 res/font/ 中,并从 R.font 类访问。

  • More Resource Types

    定义诸如布尔值、整数、维度、颜色和其他数组等值。 保存在 res/values/ 中,但是每个都从独特的 R 子类访问(例如R.bool、R.integer、R.dimen 等)。

Animation Resources

动画资源可以定义两种动画类型之一:

  1. 属性动画

使用 Animator 在设定的一段时间内修改对象的属性值,创建动画。

  1. 视图动画

视图动画框架可以使用两种类型的动画:

- 补间动画:通过使用 [Animation][11] 在单个图像上执行一系列转换来创建动画
- 框架动画:或通过使用 [AnimationDrawable][12] 顺序显示一系列图像来创建动画。

Property Animation

在 XML 中定义的动画,可在一段时间内修改目标对象的属性,如背景颜色或 Alpha 值。

FILE LOCATION

res/animator/filename.xml

文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 ValueAnimatorObjectAnimatorAnimatorSet 的资源指针。

RESOURCE REFERENCE

In Java: R.animator.filename
In XML: @[package:]animator/filename

SYNTAX

<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

该文件必须具有一个根元素:<set>、<objectAnimator> 或 <valueAnimator>。 您可以将 <set> 元素内的动画元素分组在一起,包括其他 <set> 元素。

ELEMENTS

<set>

容纳其他动画元素(<objectAnimator>,<valueAnimator> 或其他<set>元素)的容器。 代表一个 AnimatorSet

您可以指定嵌套的 <set> 标签以进一步将动画组合在一起。 每个 <set> 可以定义自己的排序属性。

attributes
  • android:ordering

    Keyword. 指定此集合中动画的播放顺序。

    Value Description
    sequentially 按顺序播放此组中的动画
    together 默认,同时播放此组中的动画。
<objectAnimator>

在特定的时间内动画化对象的特定属性。 表示一个 ObjectAnimator

attributes
  • android:propertyName

    String. Required. 动画处理的对象属性,通过其名称来引用。例如,您可以为 View 对象指定「alpha」或「backgroundColor」。但 objectAnimator 元素不暴露目标属性,因此无法在 XML 声明中将对象设置为动画。 您必须调用 loadAnimator() 来调用(inflate)动画 XML 资源,并调用 setTarget() 来设置包含此属性的目标对象。

  • android:valueTo

    float, int, or color. Required. 动画属性结束的值。 颜色表示为六位十六进制数字(例如,#333333)。

  • android:valueFrom

    float, int, or color. 动画属性开始的值。 如果未指定,则动画从该属性的 get 方法获得的值开始。 颜色表示为六位十六进制数字(例如,#333333)。

  • android:duration

    int. 动画的时间(以毫秒为单位)。 300毫秒是默认值。

  • android:startOffset

    int. 调用 start() 后动画延迟的毫秒数。

  • android:repeatCount

    int. 重复动画多少次。 设置为「-1」表示无限重复或设置为正整数。 例如,值「1」意味着动画在动画的初始运行之后重复一次,因此动画总共播放两次。 默认值是「0」,表示不重复。

  • android:repeatMode

    int. 当动画到达动画结尾时动画的行为如何。 android:repeatCount 必须设置为正整数或「-1」,以使此属性具有效果。 设置为「reverse」以在每次迭代中使动画反向,或者「repeat」以每次从头开始动画循环。

  • android:valueType

    Keyword. 如果值是一种颜色,则不要指定该属性。 动画框架自动处理颜色值

    Value Description
    intType 指定动画值是整数
    floatType 默认,指定动画值是浮点数
<animator>

在指定的时间内执行动画。 代表一个 ValueAnimator

attributes
  • android:valueTo

    float, int, or color. Required. 动画属性结束的值。 颜色表示为六位十六进制数字(例如,#333333)。

  • android:valueFrom

    float, int, or color. Required. 动画属性开始的值。颜色表示为六位十六进制数字(例如,#333333)。

  • android:duration

    int. 动画的时间(以毫秒为单位)。 300毫秒是默认值。

  • android:startOffset

    int. 调用 start() 后动画延迟的毫秒数。

  • android:repeatCount

    int. 重复动画多少次。 设置为「-1」表示无限重复或设置为正整数。 例如,值「1」意味着动画在动画的初始运行之后重复一次,因此动画总共播放两次。 默认值是「0」,表示不重复。

  • android:repeatMode

    int. 当动画到达动画结尾时动画的行为如何。 android:repeatCount 必须设置为正整数或「-1」,以使此属性具有效果。 设置为「reverse」以在每次迭代中使动画反向,或者「repeat」以每次从头开始动画循环。

  • android:valueType

    Keyword. 如果值是一种颜色,则不要指定该属性。 动画框架自动处理颜色值

    Value Description
    intType 指定动画值是整数
    floatType 默认,指定动画值是浮点数

EXAMPLE

XML 文件保存在 res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

为了运行此动画,您必须将代码中的 XML 资源充入(inflate)AnimatorSet 对象,然后在开始动画设置之前为所有动画设置目标对象。 为方便起见,调用 setTarget()AnimatorSet 的所有子节点设置单个目标对象。 以下代码显示了如何执行此操作:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.anim.property_animator);
set.setTarget(myObject);
set.start();

SEE ALSO

View Animation

视图动画框架支持补间和逐帧动画,它们都可以用 XML 声明。 以下各节介绍如何使用这两种方法。

Tween animation

XML 中定义的动画,用于执行图形上的旋转、淡入淡出、移动和拉伸等过渡。

FILE LOCATION

res/anim/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 Animation 的资源指针。

RESOURCE REFERENCE

In Java: R.anim.filename
In XML: @[package:]anim/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

该文件必须包含一个根元素:<alpha>,<scale>,<translate>,<rotate> 或 <set> 元素,它们是包含其他动画元素的组(或多个组)(甚至嵌套 <set> 元素)。

ELEMENTS

<set>

容纳其他动画元素(<alpha>,<scale>,<translate>,<rotate>)或其他 <set> 元素的容器。 表示一个 AnimationSet

attributes
  • android:interpolator

    Interpolator resource. Interpolator 应用于动画。 该值必须是对指定插值器(不是插值器类名称)的资源的引用。 您可以从平台获得默认的插值器资源,或者您可以创建自己的插值器资源。 有关插值器的更多信息,请参阅下面的讨论。

  • android:shareInterpolator

    Boolean. 如果要在所有子元素之间共享相同的插值器,则为「true」。

<alpha>

淡入或淡出动画。代表 AlphaAnimation

attributes
  • android:fromAlpha

    Float. 起始点的不透明度偏移量,其中 0.0 是透明的,1.0 是不透明的。

  • android:toAlpha

    Float. 终点的不透明度偏移量,其中 0.0 是透明的,1.0 是不透明的。

有关 <alpha> 支持的更多属性,请参阅 Animation 类引用(其中,所有 XML 属性都由此元素继承)。

<scale>

调整大小的动画。 通过指定 pivotX 和 pivotY,可以指定从其向外(或向内)增长的图像的中心点。 例如,如果这些值为 0,0(左上角),则所有增长都将下降并且向右。 代表一个 ScaleAnimation

attributes
  • android:fromXScale

    Float. 起始 X 大小偏移量,其中 1.0 表示不变。

  • android:toXScale

    Float. 终止 X 大小偏移量,其中 1.0 表示不变。

  • android:fromYScale

    Float. 起始 Y 大小偏移量,其中 1.0 表示不变。

  • android:toYScale

    Float. 终止 Y 大小偏移量,其中 1.0 表示不变。

  • android:pivotX

    Float. 对象缩放时 X 坐标保持固定。

  • android:pivotY

    Float. 对象缩放时 Y 坐标保持固定。

有关 <scale> 支持的更多属性,请参阅 Animation 类引用(其中,所有 XML 属性都由此元素继承)。

<translate>

垂直和/或水平运动。 支持以下三种格式中的任何一种:以「%」结尾从 -100 到 100 的值,表示相对于其自身的百分比; 以「%p」结尾从 -100 到 100 的值,表示相对于其父项的百分比; 没有后缀的浮点值,表示绝对值。 代表一个 TranslateAnimation

attributes
  • android:fromXDelta

    Float or percentage. 起始 X 偏移。 表示:以相对于正常位置(例如「5」)的像素为单位,以相对于元素宽度的百分比(例如「5%」)或相对于父宽度的百分比(例如「5%p」)。

  • android:toXDelta

    Float or percentage. 终止 X 偏移。 表示:以相对于正常位置(例如「5」)的像素为单位,以相对于元素宽度的百分比(例如「5%」)或相对于父宽度的百分比(例如「5%p」)。

  • android:fromYDelta

    Float or percentage. 起始 Y 偏移。 表示:以相对于正常位置(例如「5」)的像素为单位,以相对于元素高度的百分比(例如「5%」)或相对于父高度的百分比(例如「5%p」)。

  • android:toYDelta

    Float or percentage. 终止 Y 偏移。 表示:以相对于正常位置(例如「5」)的像素为单位,以相对于元素高度的百分比(例如「5%」)或相对于父高度的百分比(例如「5%p」)。

有关 <translate> 支持的更多属性,请参阅 Animation 类引用(其中,所有 XML 属性都由此元素继承)。

<rotate>

一个旋转动画。 代表一个 RotateAnimation

attributes
  • android:fromDegrees

    Float. 起始角度位置,单位为度数。

  • android:toDegrees

    Float. 终止角度位置,单位为度数。

  • android:pivotX

    Float or percentage. 旋转中心的 X 坐标。 表示:以像素为单位相对于对象的左边缘(例如「5」),相对于对象左边缘的百分比(例如「5%」)或相对于父容器左边缘的百分比(例如「5%p」)。

  • android:pivotY

    Float or percentage. 旋转中心的 Y 坐标。 表示:以像素为单位相对于对象的顶部边缘(例如「5」),以相对于对象顶部边缘的百分比(例如「5%」)或相对于父容器的顶部边缘的百分比(例如「5%p」)。

有关 <rotate> 支持的更多属性,请参阅 Animation 类引用(其中,所有 XML 属性都由此元素继承)。

EXAMPLE

XML 文件保存在 res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

此应用代码将动画应用于 ImageView 并启动动画:

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);

SEE ALSO

Interpolators

插值器是一种用 XML 定义的动画修改器,它影响动画中的变化率。 这可以让您现有的动画效果为加速,减速,重复,反弹等。

插值器应用于具有 android:interpolator 属性的动画元素,其值是对插值器资源的引用。

Android 中提供的所有插值器都是 Interpolator 类的子类。 对于每个插值器类,Android 都包含一个你可以引用的公共资源,您可以使用 android:interpolator 属性将插值器应用于动画。 下表指定了用于每个插值器的资源:

Interpolator class Resource ID
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

以下是如何将其中一个应用于 android:interpolator 属性的方法:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

Custom interpolators

如果您对平台提供的插值器(上表中列出)不满意,则可以创建具有修改属性的自定义插值器资源。 例如,您可以调整 AnticipateInterpolator 的加速度,或者调整 CycleInterpolator 的循环次数。 为此,您需要在 XML 文件中创建自己的插值器资源。

FILE LOCATION

res/anim/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向相应插值器对象的资源指针。

RESOURCE REFERENCE

In XML: @[package:]anim/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

如果您不应用任何属性,则插值器的功能与平台提供的功能(上表中列出)完全相同。

ELEMENTS

请注意,每个 Interpolator 实现(在 XML 中定义时)都以小写字母开头。

<accelerateDecelerateInterpolator>

变化速度缓慢开始和结束,但通过中间加速。

attributes

No attributes.

<accelerateInterpolator>

变化速度缓慢开始,然后加速。

attributes
  • android:factor

    Float. 加速度(默认值为 1)。

<anticipateInterpolator>

变化开始落后然后闪现。

attributes
  • android:tension

    Float. 要应用的张力量(默认值为 2)。

<anticipateOvershootInterpolator>

变化开始落后,向前闪烁并超过目标值,然后稳定在最终值。

attributes
  • android:tension

    Float. 要应用的张力量(默认值为 2)。

  • android:extraTension

    Float. 乘以张力的数量(默认值为 1.5)。

<bounceInterpolator>

最终的变化反弹。

attributes

No attributes.

<cycleInterpolator>

为动画重复指定的循环次数。 变化率遵循正弦模式。

attributes
  • android:cycles

    Integer. 循环次数(默认值为 1)。

<decelerateInterpolator>

变化速度快速开始,然后减速。

attributes
  • android:factor

    Float. 减速率(默认值为 1)。

<linearInterpolator>

变化率是不变的。

attributes

No attributes.

<overshootInterpolator>

变化闪烁并超过最后的值,然后返回。

attributes
  • android:tension

    Float. 要应用的张力量(默认值为 2)。

EXAMPLE

XML 文件保存在 res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

这个动画 XML 将应用插值器:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

Frame animation

XML 中定义的动画,按顺序显示一系列图像(类似电影)。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 AnimationDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable.filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>

ELEMENTS

<animation-list>

Required. 这必须是根元素。 包含一个或多个 <item> 元素。

attributes
  • android:oneshot

    Boolean. 如果您想执行一次动画,则为「true」; 「false」来循环播放动画。

<item>

一个单帧动画。 必须是 <animation-list> 元素的子元素。

attributes
  • android:drawable

    Drawable resource. 此帧使用的 drawable。

  • android:duration

    Integer. 显示此帧的持续时间,以毫秒为单位。

EXAMPLE

XML 文件保存在 res/drawable/rocket.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

此应用代码将设置动画作为View的背景,然后播放动画:

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();

SEE ALSO

Color State List Resource

ColorStateList 是一个可以用 XML 定义的对象,您可以将其应用为颜色,但实际上会根据所应用的 View 对象的状态更改颜色。 例如,Button 小部件可以以几种不同状态之一存在(按下 - pressed,焦点 - focused 或都不),并且使用颜色状态列表可以在每个状态期间提供不同的颜色。

您可以在 XML 文件中描述状态列表。 每个颜色在单个 <selector> 元素内的 <item> 元素中定义。 每个 <item> 使用各种属性来描述应该使用它的状态。

在每次状态更改期间,状态列表将从上到下遍历,并且将使用匹配当前状态的第一个项目 - 选择不是基于「最佳匹配」,而是仅仅满足遇到的最小状态标准的第一个条目。

注意:如果要提供静态颜色资源,请使用简单的 Color 值。

FILE LOCATION

res/color/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 ColorStateList 的资源指针。

RESOURCE REFERENCE

In Java: R.color.filename
In XML: @[package:]color/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

ELEMENTS

<selector>

Required. 这必须是根元素。 包含一个或多个 <item> 元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,其必须是「http://schemas.android.com/apk/res/android」。

<item>

定义在特定状态期间使用的颜色,如其属性所述。 必须是 <selector> 元素的子元素。

attributes
  • android:color

    Hexadeximal color. Required. 颜色由 RGB 值和可选的 Alpha 通道指定。

    该值始终以英镑(#)字符开头,然后是以下列格式之一的 Alpha-Red-Green-Blue 信息:

    • #RGB
    • #ARGB
    • #RRGGBB
    • #AARRGGBB
  • android:state_pressed

    Boolean. 如果在按下该对象时应该使用该项目(例如当按下某个按钮时),则为「true」; 如果应在默认的非按压状态下使用此项目,则为「false」。

  • android:state_focused

    Boolean. 如果在对象获得焦点时使用此项目(例如使用轨迹球/d-pad 突出显示按钮),则为「true」; 如果这个项目应该用于默认的非获得焦点状态,则为「false」。

  • android:state_selected

    Boolean. 如果在选择对象时应该使用此项目(例如打开标签页时),则为「true」; 如果未选择对象时应使用此项目,则为「false」。

  • android:state_checkable

    Boolean. 如果在对象可选中时应该使用这个项目,则为「true」; 如果在对象不可选中时应该使用这个项目,则为「false」。 (仅当对象可以在可选中和不可选中的小部件之间切换时才有用。)

  • android:state_checked

    Boolean. 如果对象是选中时应该使用该项目,则为「true」; 如果对象是未选中时应该使用「false」。

  • android:state_enabled

    Boolean. 如果对象启用时能够使用该项目(能够接收触摸/点击事件),则为「true」; 如果对象禁用时应该使用「false」。

  • android:state_window_focused

    Boolean. 如果应用窗口具有焦点(应用位于前台)时应使用此项目,则为「true」,如果应用窗口没有焦点时应使用此项目,则为「false」(例如,下拉通知窗口或出现对话框)。

注意:请记住,状态列表中与匹配对象当前状态的第一项将被应用。 因此,如果列表中的第一项不包含上面的状态属性,那么每次都会应用它,这就是为什么默认值应始终为最后值的原因,如以下示例所示。

EXAMPLE

XML 文件保存在 res/color/button_text.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

此布局 XML 将将颜色列表应用于 View:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />

SEE ALSO

Drawable Resources

可绘制资源是可以绘制到屏幕的图形的通用概念,您可以使用 API(如 getDrawable(int))检索图形,或者将其应用于具有诸如 android:drawable 和 android:icon 等属性的其他 XML 资源。 有几种不同类型的 drawable:

  • Bitmap File

    位图图形文件(.png,.jpg 或 .gif)。 创建一个 BitmapDrawable

  • Nine-Patch File

    一个带有可伸缩区域的 PNG 文件,允许根据内容调整图像大小(.9.png)。 创建 NinePatchDrawable

  • Layer List

    管理一系列其他 Drawable 的 Drawable。 这些按照数组顺序绘制,因此具有最大索引的元素将绘制在顶部。 创建一个 LayerDrawable

  • State List

    为不同状态引用不同位图图形的 XML 文件(例如,按下按钮时使用不同的图像)。 创建一个 StateListDrawable

  • Level List

    一个 XML 文件,它定义了一个管理多个可选 Drawable 的 Drawable,每个可分配一个最大数值。 创建一个 LevelListDrawable

  • Transition Drawable

    定义可在两个可绘制资源之间交叉淡化的 drawable 的 XML 文件。 创建一个 TransitionDrawable

  • Inset Drawable

    XML 文件定义了一个 drawable 将按指定距离嵌入到另一个 drawable 内部。 当 View 需要比 View 的实际边界更小的背景 drawable 时,这非常有用。

  • Clip Drawable

    一个 XML 文件,它定义了一个 drawable,它基于此 Drawable 的当前级别值剪辑另一个 Drawable。 创建一个 ClipDrawable

  • Scale Drawable

    一个 XML 文件,它定义了一个 drawable,它根据当前的级别值更改另一个 Drawable 的大小。 创建一个 ScaleDrawable

  • Shape Drawable

    定义几何形状(包括颜色和渐变)的 XML 文件。 创建一个 GradientDrawable

另请参阅动画资源文档以了解如何创建 AnimationDrawable

注意颜色资源也可以用作 XML 中的 drawable。 例如,创建可绘制的状态列表时,可以引用 android:drawable 属性(android:drawable=“@color/green”)的颜色资源。

Bitmap

位图图像。 Android 支持三种格式的位图文件:.png(首选),.jpg(可接受),.gif(不鼓励)。

您可以直接引用位图文件,使用文件名作为资源 ID,或在 XML 中创建别名资源 ID。

注意:在构建过程中,通过 aapt 工具进行无损图像压缩可能会自动优化位图文件。 例如,不需要超过 256 色的真彩色 PNG 可以通过调色板转换为 8 位 PNG。 这将生成质量相同的图像,但需要更少的内存。 所以请注意,放置在这个目录中的图像二进制文件可以在构建过程中更改。 如果您打算将图像作为位流读取以将其转换为位图,请将图像放在 res/raw/ 文件夹中,而这里的位图不会进行优化。

Bitmap File

位图文件是.png,.jpg 或 .gif 文件。 当你将它们保存在 res/drawable/ 目录中时,Android 为这些文件中的任何一个创建 Drawable 资源。

FILE LOCATION

res/drawable/filename.png (.png, .jpg, 或 .gif)
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 BitmapDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

EXAMPLE

使用 res/drawable/myimage.png 保存图像,此布局 XML 将图像应用于 View:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

以下应用代码将检索图像作为 Drawable

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);

SEE ALSO

XML Bitmap

XML 位图是在 XML 中定义的指向位图文件的资源。 该效果是原始位图文件的别名。 XML 可以为位图指定其他属性,例如抖动和平铺。

注意:您可以使用 <bitmap> 元素作为 <item> 元素的子元素。 例如,在创建状态列表或图层列表时,可以从 <item> 元素中排除 android:drawable 属性,并在其中嵌套定义可绘制项目的 <bitmap>。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 BitmapDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

ELEMENTS

<bitmap>

定义位图源及其属性。

attributes
  • xmlns:android

    String. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。 只有当 <bitmap> 是根元素时才需要这样做 - 当 <bitmap> 嵌套在 <item> 中时,不需要它。

  • android:src

    Drawable resource. Required. 引用可绘制资源。

  • android:antialias

    Boolean. 启用或禁用抗锯齿。

  • android:dither

    Boolean. 如果位图不具有与屏幕相同的像素配置(例如:具有 RGB 565 屏幕的 ARGB 8888 位图),则启用或禁用位图抖动。

  • android:filter

    Boolean. 启用或禁用位图滤镜。 当位图缩小或拉伸以平滑其外观时使用滤镜。

  • android:gravity

    Keyword. 定义位图的重心。 如果位图小于容器,则重心表示绘图在其容器中的位置。

    必须是以下常量值中的一个或多个(用'|‘分隔):

    Value Description
    top 将对象放在容器的顶部,而不改变其大小。
    bottom 将对象放在容器的底部,而不改变其大小。
    left 将对象放在容器的左边缘,而不改变其大小。
    right 将物体放在其容器的右边缘,而不改变其大小。
    center_vertical 将对象放置在其容器的垂直中心,而不改变其大小。
    fill_vertical 如果需要,增大对象的垂直尺寸,使其完全填充其容器。
    center_horizontal 将对象放置在其容器的水平中心,而不改变其大小。
    fill_horizontal 如果需要,增大对象的水平尺寸,使其完全填充其容器。
    center 将对象放置在其容器中垂直和水平轴上的中心,而不更改其大小。
    fill 如果需要,增大对象的水平和垂直尺寸,使其完全填充其容器。 这是默认设置。
    clip_vertical 附加选项可以设置为将子元素的顶部和/或底部边缘剪切到其容器的边界。 该剪辑基于垂直重心:顶部重心剪切底部边缘,底部重心剪切顶部边缘,并且都不剪切两个边缘。
    clip_horizontal 附加选项可以设置为将子元素的左边和/或右边剪切到其容器的边界。 该剪辑基于水平重力:左侧重力剪切右侧边缘,右侧重力剪切左侧边缘,并且都不剪切两侧边缘。
  • android:mipMap

    Boolean. 启用或禁用 mipmap 提示。 有关更多信息,请参阅 setHasMipMap()。 默认值为 false。

  • android:tileMode

    Keyword. 定义平铺模式。 当启用平铺模式时,重复位图。 启用平铺模式时会忽略重心。

    必须是以下常数值之一:

    Value Description
    disabled 不要平铺位图。 这是默认值。
    clamp 如果着色器在其原始边界之外绘制,则复制边缘颜色
    repeat 水平和垂直重复着色器的图像。
    mirror 水平和垂直重复着色器的图像,交替镜像以使相邻图像始终接缝。

EXAMPLE

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />

SEE ALSO

Nine-Patch

NinePatch 是一个 PNG 图像,您可以在该图像中定义当 View 内的内容超出正常图像边界时 Android 缩放的可伸展区域。 您通常将此类型的图像指定为至少有一个尺寸设置为「wrap_content」的 View 的背景,并且当 View 增长以容纳内容时,Nine-Patch 图像也会缩放以匹配 View 的尺寸。 Nine-Patch 图像的一个使用示例是 Android 的标准 Button 小部件所使用的背景,该小部件必须伸展以容纳按钮内的文本(或图像)。

与普通位图相同,您可以直接或通过 XML 定义的资源引用 Nine-Patch 文件。

有关如何使用可拉伸区域创建 Nine-Patch 文件的完整讨论,请参阅 2D 图形文档。

Nine-Patch File

FILE LOCATION

res/drawable/filename.9.png
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 NinePatchDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

EXAMPLE

使用 res/drawable/myninepatch.9.png 保存图像,此布局 XML 将 Nine-Patch 应用于 View:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />

SEE ALSO

XML Nine-Patch

XML Nine-Patch 是一种用 XML 定义的资源,指向一个 Nine-Patch 文件。 XML 可以指定图像的抖动。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 NinePatchDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />

ELEMENTS

<nine-patch>

定义 Nine-Patch 源及其属性。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

  • android:src

    Drawable resource. Required. 引用一个 Nine-Patch 文件。

  • android:dither

    Boolean. 如果位图不具有与屏幕相同的像素配置(例如:具有 RGB 565 屏幕的 ARGB 8888 位图),则启用或禁用位图抖动。

EXAMPLE

<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

Layer List

LayerDrawable 是一个 drawable 对象,用于管理其他 drawable 数组。 列表中的每个 drawable 都按照列表的顺序绘制 - 列表中的最后一个 drawable 在顶部。

每个 drawable 由单个 <layer-list> 元素内的 <item> 元素表示。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 LayerDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>

ELEMENTS

<layer-list>

Required. 这必须是根元素。 包含一个或多个 <item> 元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

<item>

定义一个 drawable 放置在 layer drawable 中由其属性定义的位置。 必须是 <selector> 元素的子元素。 接受子 <bitmap> 元素。

attributes
  • android:drawable

    Drawable resource. Required. 引用 drawable 资源。

  • android:id

    Resource ID. 此 drawable 的唯一资源 ID。 要为此项创建新的资源 ID,请使用以下格式:「@+id/name」。 加号表示应该将其创建为新的 ID。 您可以使用此标识符通过 View.findViewById()Activity.findViewById() 来检索和修改 drawable。

  • android:top

    Integer. 顶部的像素偏移量。

  • android:right

    Integer. 右边的像素偏移量。

  • android:bottom

    Integer. 底部的像素偏移量。

  • android:left

    Integer. 左边的像素偏移量。

默认情况下,所有 drawable 项目都会缩放以适应包含 View 的大小。 因此,将图像放置在不同位置的图层列表中可能会增加 View 的大小,并会根据需要缩放一些图像。 要避免缩放列表中的项目,请使用 <item> 元素内的 <bitmap> 元素指定 drawable,并将重心定义为不缩放的内容,如「center」。 例如,下面的 <item> 定义一个缩放以适应其容器 View 的项目:

<item android:drawable="@drawable/image" />

为了避免缩放,以下示例使用一个具有居中重心的 <bitmap> 元素:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>

EXAMPLE

XML 文件保存在 res/drawable/layers.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

请注意,此示例使用嵌套的 <bitmap> 元素为具有「center」重心的每个项目定义 drawable 资源。 这确保了由于偏移图像引起的大小调整,没有图像被缩放以适应容器的大小。

此布局 XML 将 drawable 应用于 View:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

结果是一堆越来越偏移的图像:

Result Image

SEE ALSO

State List

StateListDrawable 是一个在 XML 中定义的 drawable 对象,它使用多个不同的图像来表示同一图形,具体取决于对象的状态。 例如,Button 小部件可以以几种不同状态之一存在(按下,获得焦点或都不),并且使用状态列表 drawable,您可以为每个状态提供不同的背景图像。

您可以在 XML 文件中描述状态列表。 每个图形由单个 <selector> 元素内的 <item> 元素表示。 每个 <item> 使用各种属性来描述它应该用作 drawable 的图形的状态。

在每次状态更改期间,状态列表将自上而下遍历,并使用与当前状态相匹配的第一个项目 - 选择不是基于「最佳匹配」,而只是第一个满足状态最低标准的项目。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 StateListDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

ELEMENTS

<selector>

Required. 这必须是根元素。 包含一个或多个 <item> 元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

  • android:constantSize

    Boolean. 如果 drawable 报告的内部大小在状态改变时保持不变(大小是所有状态的最大值),则为「true」。 如果尺寸根据当前状态而变化,则为「false」。 默认为 false。

  • android:dither

    Boolean. 如果位图没有与屏幕相同的像素配置(例如,具有 RGB 565 屏幕的 ARGB 8888 位图),则为「true」以启用位图抖动; 「false」禁用抖动。 默认值是 true。

  • android:variablePadding

    Boolean. 如果 drawable 的 padding 应基于所选的当前状态而改变,则为「true」; 如果 padding 保持不变(基于所有状态的最大 padding),则为「false」。 启用此功能要求您在状态更改时处理执行布局,这通常不受支持。 默认为 false。

<item>

定义在特定状态期间使用的 drawable,如其属性所述。 必须是 <selector> 元素的子元素。

attributes
  • android:drawable

    Drawable resource. Required. 引用 drawable 资源。

  • android:state_pressed

    Boolean. 如果在按下该对象时应该使用该项目(例如当按下某个按钮时),则为「true」; 如果应在默认的非按压状态下使用此项目,则为「false」。

  • android:state_focused

    Boolean. 如果在对象获得输入焦点时使用此项目(例如当用户选择一个文本框时),则为「true」; 如果这个项目应该用于默认的非获得焦点状态,则为「false」。

  • android:state_hovered

    Boolean. 如果该对象被光标悬停时应该使用该项,则为「true」; 如果应在默认的非悬停状态下使用此项目,则为「false」。 通常,这个 drawable 可能与用「focused」状态的 drawable 相同。

    API 级别 14 时引入。

  • android:state_selected

    Boolean. 如果在使用方向控件进行导航时(如使用 d-pad 在列表中导航时),当对象是当前用户选择时应使用该项,则为「true」; 如果未选择对象时应使用此项目,则为「false」。 焦点(android:state_focused)不够用时(如列表视图具有焦点并且其中的某个项目用 d-pad 选中)时,将使用所选状态。

  • android:state_checkable

    Boolean. 如果在对象可选中时应该使用这个项目,则为「true」; 如果在对象不可选中时应该使用这个项目,则为「false」。 (仅当对象可以在可选中和不可选中的小部件之间切换时才有用。)

  • android:state_checked

    Boolean. 如果对象是选中时应该使用该项目,则为「true」; 如果对象是未选中时应该使用「false」。

  • android:state_enabled

    Boolean. 如果对象启用时能够使用该项目(能够接收触摸/点击事件),则为「true」; 如果对象禁用时应该使用「false」。

  • android:state_activated

    Boolean. 如果该项用于对象作为永久性选择时被激活(例如,在持久导航视图中「突出显示」之前选择的列表项),则为「true」;如果该项用户对象未被激活时则为「false」。

    在 API 级别 11 中引入。

  • android:state_window_focused

    Boolean. 如果应用窗口具有焦点(应用位于前台)时应使用此项目,则为「true」,如果应用窗口没有焦点时应使用此项目,则为「false」(例如,下拉通知窗口或出现对话框)。

注意:请记住,状态列表中与匹配对象当前状态的第一项将被应用。 因此,如果列表中的第一项不包含上面的状态属性,那么每次都会应用它,这就是为什么默认值应始终为最后值的原因,如以下示例所示。

EXAMPLE

XML 文件保存在 res/drawable/button.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

此布局 XML 应用状态列表 drawable 到一个 Button:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />

SEE ALSO

Level List

一个 Drawable 管理多个可选 Drawable,每个 Drawable 都分配一个最大数值。 使用 setLevel() 设置 drawable 的级别值,将 drawable 资源加载到 android:maxLevel 值大于或等于传递给方法的值的级别列表中。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 LevelListDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>

ELEMENTS

<level-list>

这必须是根元素。 包含一个或多个 <item> 元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

<item>

定义在某个级别使用的 drawable。

attributes
  • android:drawable

    Drawable resource. Required. 引用 drawable 资源。

  • android:maxLevel

    Integer. 此项目允许的最大级别。

  • android:minLevel

    Integer. 此项目允许的最小级别。

EXAMPLE

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

一旦将其应用于 View,可以使用 setLevel()setImageLevel() 更改等级。

SEE ALSO

Transition Drawable

TransitionDrawable 是一个 drawable 对象,可以在两个可绘制资源之间交叉淡化。

每个 drawable 由单个 <transition> 元素内的 <item> 元素表示。 支持不超过两项(item)。 要向前过渡,请调用 startTransition()。 要向后过渡,请调用 reverseTransition()

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 TransitionDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>

ELEMENTS

<transition>

Required. 这必须是根元素。 包含一个或多个 <item> 元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

<item>

定义作为 drawable 转换的一部分的 drawable。 必须是 <transition> 元素的子元素。 接受子 <bitmap> 元素。

attributes
  • android:drawable

    Drawable resource. Required. 引用 drawable 资源。

  • android:id

    Resource ID. 此 drawable 的唯一资源 ID。 要为此项创建新的资源 ID,请使用以下格式:「@+id/name」。 加号表示应该将其创建为新的 ID。 您可以使用此标识符通过 View.findViewById()Activity.findViewById() 来检索和修改 drawable。

  • android:top

    Integer. 顶部的像素偏移量。

  • android:right

    Integer. 右边的像素偏移量。

  • android:bottom

    Integer. 底部的像素偏移量。

  • android:left

    Integer. 左边的像素偏移量。

EXAMPLE

XML 文件保存在 res/drawable/transition.xml:

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

此布局 XML 应用 drawable 到 View:

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

下面的代码执行从第一项到第二项的 500ms 过渡:

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);

SEE ALSO

Inset Drawable

XML 中定义的 drawable 将按指定的距离嵌入到另一个 drawable 内部。 当 View 需要比 View 实际边界更小的背景时,这非常有用。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 InsetDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />

ELEMENTS

<inset>

定义嵌入 drawable。 这必须是根元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

  • android:drawable

    Drawable resource. Required. 引用 drawable 资源。

  • android:insetTop

    Dimension. 与顶部的距离。可以使一个尺寸值,或者一个尺寸的资源

  • android:insetRight

    Dimension. 与右边的距离。可以使一个尺寸值,或者一个尺寸的资源

  • android:insetBottom

    Dimension. 与底部的距离。可以使一个尺寸值,或者一个尺寸的资源

  • android:insetLeft

    Dimension. 与左边的距离。可以使一个尺寸值,或者一个尺寸的资源

EXAMPLE

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />

SEE ALSO

Clip Drawable

XML 中定义的 drawable 基于此 Drawable 的当前级别剪辑另一个 drawable。 您可以控制子 drawable 在此级别上在宽度和高度上的裁剪量,以及控制放置在整个容器中的位置的重心。 最常用来实现诸如进度条之类的东西。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 ClipDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />

ELEMENTS

<clip>

定义剪贴画。 这必须是根元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

  • android:drawable

    Drawable resource. Required. 引用要剪辑的 drawable 资源。

  • android:clipOrientation

    Keyword. 剪辑的方向。

    必须是以下常数值之一:

    Value Description
    horizontal 水平剪辑 drawable。
    vertical 垂直剪辑 drawable。
  • android:gravity

    Keyword. 指定 drawable 内的剪辑位置。

    必须是以下常量值中的一个或多个(用’|‘分隔):

    Value Description
    top 将对象放在容器的顶部,而不改变其大小。 当 clipOrientation 为「vertical」时,裁剪发生在 drawable 的底部。
    bottom 将对象放在容器的底部,而不改变其大小。 当 clipOrientation 为「vertical」时,裁剪发生在 drawable 的顶部。
    left 将对象放在容器的左边缘,而不改变其大小。 这是默认设置。 当 clipOrientation 为「horizontal」时,裁剪发生在 drawable 的右侧。 这是默认设置。
    right 将对象放在容器的右边缘,而不改变其大小。当 clipOrientation 为「horizontal」时,裁剪发生在 drawable 的左侧。
    center_vertical 将对象放置在其容器的垂直中心,而不改变其大小。 剪切行为与重心为「center」时相同。
    fill_vertical 如果需要,增大对象的垂直尺寸,使其完全填充其容器。 当 clipOrientation 为「vertical」时,由于 drawable 填充垂直空间(除非 drawable 级别为 0,在这种情况下它不可见),所以不会发生剪切。
    center_horizontal 将对象放置在其容器的水平中心,而不改变其大小。 剪切行为与与重心为「center」时相同。
    fill_horizontal 如果需要,增大对象的水平尺寸,使其完全填充其容器。 当 clipOrientation 为「horizontal」时,由于 drawable 会填充水平空间(除非 drawable 级别是 0,在这种情况下它不可见),所以不会发生剪切。
    center 将对象放置在其容器垂直和水平轴的中心,而不更改其大小。 当 clipOrientation 为「horizontal」时,裁剪发生在左侧和右侧。 当 clipOrientation 是「vertical」时,裁剪发生在顶部和底部。
    fill 如果需要,增大对象的水平和垂直尺寸,使其完全填充其容器。 由于 drawable 填充水平和垂直空间(除非 drawable 级别为 0,在这种情况下它不可见),所以不会发生裁剪。
    clip_vertical 附加选项可以设置子元素的顶部和/或底部边缘剪切到其容器的边界。 该剪辑基于垂直重心:顶部重心剪切底部边缘,底部重心剪切顶部边缘,并且都不剪切两个边缘。
    clip_horizontal 附加选项可以设置子元素的左边和/或右边边缘剪切到其容器的边界。 该剪辑基于水平重心:左侧重心剪切右侧边缘,右侧重心剪切左侧边缘,并且都不剪切两个边缘。

EXAMPLE

XML 文件保存在 res/drawable/clip.xml:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

下列布局 XML 应用剪辑画到一个 View:

<ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

下面的代码获取 drawable 并增加裁剪量以逐步显示图像:

ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getBackground();
drawable.setLevel(drawable.getLevel() + 1000);

增加级别会减少裁剪量并缓慢显示图像。这里是 7000 的级别:

Clip

注意:默认级别为 0,该级别已完全剪裁,因此图像不可见。 级别为 10,000 时,图像不会被剪切并完全可见。

SEE ALSO

Scale Drawable

XML 中定义的 drawable 根据当前级别更改另一个 drawable 的大小。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 ScaleDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />

ELEMENTS

<scale>

定义缩放 drawable。 这必须是根元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

  • android:drawable

    Drawable resource. Required. 引用 drawable 资源。

  • android:scaleGravity

    Keyword. 指定缩放后的重心位置。

    必须是以下常量值中的一个或多个(用’|‘分隔):

    Value Description
    top 将对象放在容器的顶部,而不改变其大小。
    bottom 将对象放在容器的底部,而不改变其大小。
    left 将对象放在容器的左边缘,而不改变其大小。 这是默认设置。
    right 将对象放在容器的右边缘,而不改变其大小。当 clipOrientation 为「horizontal」时,裁剪发生在 drawable 的左侧。
    center_vertical 将对象放置在其容器的垂直中心,而不改变其大小。
    fill_vertical 如果需要,增大对象的垂直尺寸,使其完全填充其容器。
    center_horizontal 将对象放置在其容器的水平中心,而不改变其大小。
    fill_horizontal 如果需要,增大对象的水平尺寸,使其完全填充其容器。
    center 将对象放置在其容器垂直和水平轴的中心,而不更改其大小。
    fill 如果需要,增大对象的水平和垂直尺寸,使其完全填充其容器。
    clip_vertical 附加选项可以设置子元素的顶部和/或底部边缘剪切到其容器的边界。 该剪辑基于垂直重心:顶部重心剪切底部边缘,底部重心剪切顶部边缘,并且都不剪切两个边缘。
    clip_horizontal 附加选项可以设置子元素的左边和/或右边边缘剪切到其容器的边界。 该剪辑基于水平重心:左侧重心剪切右侧边缘,右侧重心剪切左侧边缘,并且都不剪切两个边缘。
  • android:scaleHeight

    Percentage. 缩放高度表示为 drawable 边界的百分比。 该值的格式为XX%。 例如:100%,12.5%等

  • android:scaleWidth

    Percentage. 缩放宽度表示为 drawable 边界的百分比。 该值的格式为XX%。 例如:100%,12.5%等

EXAMPLE

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />

SEE ALSO

Shape Drawable

这是在 XML 中定义的通用形状。

FILE LOCATION

res/drawable/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 GradientDrawable 的资源指针。

RESOURCE REFERENCE

In Java: R.drawable.filename
In XML: @[package:]drawable/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>

ELEMENTS

<shape>

形状 drawable。 这必须是根元素。

attributes
  • xmlns:android

    String. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

  • android:shape

    Keyword. 定义形状的类型。有效的值是:

    Value Description
    “rectangle” 矩形,填充包含它的 View。 这是默认形状。
    “oval” 椭圆形,适合包含它的 View 的尺寸。
    “line” 水平线,跨越包含它的 View 的宽度。该形状需要 <stroke> 元素来定义线条的宽度。
    “ring” 环形

以下属性仅在 android:shape=“ring” 时使用

  • android:innerRadius

    Dimension. 环内部的半径(中间的孔),值为尺寸值或尺寸资源。

  • android:innerRadiusRatio

    Float. 环内部部分的半径,表示为环宽度的比率。 例如,如果 android:innerRadiusRatio=“5”,那么内半径等于环的宽度除以 5。此值由 android:innerRadius 覆盖。 默认值是 9。

  • android:thickness

    Dimension. 环的厚度,值为尺寸值或尺寸资源

  • android:thicknessRatio

    Float. 环的厚度,以环的宽度的比例表示。 例如,如果 android:thicknessRatio=“2”,那么厚度等于环的宽度除以 2。此值由 android:innerRadius 覆盖。 默认值是 3。

  • android:useLevel

    Boolean. 如果这用作 LevelListDrawable,则为「true」。 这通常应该是「false」,否则你的形状可能不会出现。

<corners>

为形状创建圆角。 只适用于形状是矩形的情况。

attributes
  • android:radius

    Dimension. 所有角落的半径,值为尺寸值或尺寸资源。 通过以下属性覆盖每个角落。

  • android:topLeftRadius

    Dimension. 左上角的半径,值为尺寸值或尺寸资源

  • android:topRightRadius

    Dimension. 右上角的半径,值为尺寸值或尺寸资源

  • android:bottomLeftRadius

    Dimension. 左下角的半径,值为尺寸值或尺寸资源

  • android:bottomRightRadius

    Dimension. 右下角的半径,值为尺寸值或尺寸资源

注意:每个角必须(最初)的角半径大于1,否则角不会变圆。 如果你想要特定的角落不是圆角,一个解决方法是使用 android:radius 来设置一个大于 1 的默认角半径,然后用你真正想要的值覆盖每个角,提供零(“0dp” )给你不想要圆角的地方。

<gradient>

指定形状的渐变颜色。

attributes
  • android:angle

    Integer. 渐变的角度,以度为单位。 0 从左到右,90 从下到上。 它必须是 45 的倍数。默认值是 0。

  • android:centerX

    Float. 渐变中心的相对 X 位置(0 - 1.0)。

  • android:centerY

    Float. 渐变中心的相对 Y 位置(0 - 1.0)。

  • android:centerColor

    Color. 开始和结束颜色之间的可选颜色,值为十六进制值或颜色资源

  • android:endColor

    Color. 结束颜色,值为十六进制值或颜色资源

  • android:gradientRadius

    Float. 渐变的半径。 仅在 android:type=“radial” 时应用。

  • android:startColor

    Color. 开始颜色,值为十六进制值或颜色资源

  • android:type

    Keyword. 要应用的渐变模式的类型。 有效值是:

    Value Description
    “linear” 线性渐变。 这是默认设置。
    “radial” 径向渐变。 起始颜色是中心颜色。
    “sweep” 清晰的线条渐变。
  • android:useLevel

    Boolean. 如果这用作 LevelListDrawable,则为「true」。

<padding>

应用于包含它的 View 元素的填充(填充 View 内容的位置,而不是形状)。

attributes
  • android:left

    Dimension. 左侧内边距,值为尺寸值或尺寸资源

  • android:top

    Dimension. 顶部内边距,值为尺寸值或尺寸资源

  • android:right

    Dimension. 右侧内边距,值为尺寸值或尺寸资源

  • android:bottom

    Dimension. 底部内边距,值为尺寸值或尺寸资源

<size>

形状的尺寸。

attributes
  • android:height

    Dimension. 形状的高度,值为尺寸值或尺寸资源

  • android:width

    Dimension. 形状的宽度,值为尺寸值或尺寸资源

注意:默认情况下,形状缩放到与此处定义的尺寸成比例的容器 View 大小。 在 ImageView 中使用形状时,可以通过将 android:scaleType 设置为「center」来限制缩放比例。

<solid>

纯色填充形状。

attributes
  • android:color

    Color. 要应用于形状的颜色,值为十六进制值或颜色资源

<stroke>

形状的 stroke 线。

attributes
  • android:width

    Dimension. 线条的粗细,值为尺寸值或尺寸资源

  • android:color

    Color. 线条的颜色,值为十六进制值或颜色资源

  • android:dashGap

    Dimension. 线破折号之间的距离,值为尺寸值或尺寸资源。 只有在设置了 android:dashWidth 时才有效。

  • android:dashWidth

    Dimension. 每条虚线的大小,值为尺寸值或尺寸资源。 只有在设置了 android:dashGap 时才有效。

EXAMPLE

XML 文件保存在 res/drawable/gradient_box.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

该布局 XML 应用形状 drawable 到一个 View:

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

该应用代码获取一个形状 drawable 并将其应用到一个 View:

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

SEE ALSO

Layout Resource

布局资源定义 Activity 中 UI 的体系结构或 UI 的一个组件。

FILE LOCATION

res/layout/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 View(或其子类) 的资源指针。

RESOURCE REFERENCE

In Java: R.layout.filename
In XML: @[package:]layout/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

注意:根元素可以是 ViewGroupView或 <merge> 元素,但必须只有一个根元素,并且它必须包含具有 android 命名空间的 xmlns:android 属性,如上所示。

ELEMENTS

<ViewGroup>

其他 View 元素的容器。 有许多不同类型的 ViewGroup 对象,每个对象都允许您以不同的方式指定子元素的布局。 不同种类的 ViewGroup 对象包括 LinearLayoutRelativeLayoutFrameLayout

你不应该假设 ViewGroup 的派生将接受嵌套 View。 一些 ViewGroupAdapterView 类的实现,它只通过 Adapter 确定它的子节点。

attributes
  • android:id

    Resource ID. 元素的唯一资源名称,可用于从应用获取对 ViewGroup 的引用。

  • android:layout_height

    Dimension or keyword. Required. 组的高度,值为尺寸或尺寸资源,或关键字(「match_parent」或「wrap_content」)。

  • android:layout_width

    Dimension or keyword. Required. 组的宽度,值为尺寸或尺寸资源,或关键字(「match_parent」或「wrap_content」)。

ViewGroup 基类支持更多属性,ViewGroup 的每个实现都支持更多属性。 有关所有可用属性的参考,请参阅 ViewGroup 类的相应参考文档。

<View>

一个单独的 UI 组件,通常称为「widget - 小部件」。 不同种类的 View 对象包括 TextViewButtonCheckBox

attributes
  • android:id

    Resource ID. 元素的唯一资源名称,可用于从应用获取对 View 的引用。

  • android:layout_height

    Dimension or keyword. Required. 元素的高度,值为尺寸或尺寸资源,或关键字(「match_parent」或「wrap_content」)。

  • android:layout_width

    Dimension or keyword. Required. 元素的宽度,值为尺寸或尺寸资源,或关键字(「match_parent」或「wrap_content」)。

View 基类支持更多属性,View 的每个实现都支持更多属性。 有关所有可用属性的参考,请参阅相应参考文档。

<requestFocus>

任何表示 View 对象的元素都可以包含这个空元素,它在屏幕上给出它的父级初始焦点。 每个文件只能有一个这样的元素。

<include>

包含一个布局文件到该布局。

attributes
  • layout

    Layout resource. Required. 指向一个布局资源。

  • android:id

    Resource ID. 覆盖提供给包含布局中根视图的 ID。

  • android:layout_height

    Dimension or keyword. 覆盖提供给包含布局中根视图的高度。 只有在 android:layout_width 也被声明的情况下才有效。

  • android:layout_width

    Dimension or keyword. 覆盖提供给包含布局中根视图的宽度。 只有在 android:layout_height 也被声明的情况下才有效。

您可以在包含布局中的根元素支持的 <include> 中包含任何其他布局属性,它们将覆盖在根元素中定义的布局属性。

注意:如果要使用 <include> 标签覆盖布局属性,则必须同时覆盖 android:layout_height 和 android:layout_width 以使其他布局属性生效。

包含布局的另一种方法是使用 ViewStub。 这是一个轻量级 View,除非您明确夸大它,否则不会占用布局空间,此时它会包含由其 android:layout 属性定义的布局文件。 有关使用 ViewStub 的更多信息,请阅读按需加载 View

<merge>

未在布局层次结构中绘制的替代根元素。 如果知道此布局将放置到已包含适当的父视图以包含 <merge> 元素的子项的布局中,则将此用作根元素非常有用。 当您计划使用 <include> 将此布局包含在另一个布局文件中时,这特别有用,并且此布局不需要不同的ViewGroup容器。 有关合并布局的更多信息,请阅读使用 <include/> 重新使用布局

Value for android:id

对于 ID 值,通常应该使用以下语法形式:「@+id/name」。 加号(+)表示这是一个新的资源 ID,并且 aapt 工具将在 R.java 类中创建一个新的资源整数(如果它尚不存在)。 例如:

<TextView android:id="@+id/nameTextbox"/>

nameTextbox 名称现在是附加到此元素的资源 ID。 然后可以在 Java 中引用该 ID 与其关联的 TextView:

findViewById(R.id.nameTextbox);

该代码返回 TextView 对象。

但是,如果您已经定义了一个 ID资源(并且它尚未使用),那么您可以通过排除 android:id 值中的加号来将该 ID 应用于 View 元素。

Value for android:layout_height and android:layout_width

可以使用 Android 支持的任何尺寸单位(px,dp,sp,pt,in,mm)或使用以下关键字来表示高度和宽度值:

Value Description
match_parent 设置尺寸以匹配父元素的尺寸。 在 API 级别 8 中添加以废弃 fill_parent。
wrap_content 仅将尺寸设置为适合此元素内容所需的尺寸。
Custom View elements

您可以创建自己的自定义 View 和 ViewGroup 元素,并将它们作为标准布局元素应用于您的布局。 您还可以在 XML 元素中指定支持的属性。 要了解更多信息,请参阅自定义组件开发人员指南。

EXAMPLE

XML 文件保存在 res/layout/main_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

此应用代码将在 onCreate() 方法中加载 Activity 的布局:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}

SEE ALSO

Menu Resource

菜单资源定义了可以使用 MenuInflater 填充(inflate)的应用菜单(选项菜单,上下文菜单或子菜单)。

有关使用菜单的指导,请参阅菜单开发人员指南。

FILE LOCATION

res/menu/filename.xml
文件名将被用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 Menu(或其子类) 的资源指针。

RESOURCE REFERENCE

In Java: R.menu.filename
In XML: @[package:]menu/filename

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@[+][package:]id/resource_name"
          android:title="string"
          android:titleCondensed="string"
          android:icon="@[package:]drawable/drawable_resource_name"
          android:onClick="method name"
          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
          android:actionLayout="@[package:]layout/layout_resource_name"
          android:actionViewClass="class name"
          android:actionProviderClass="class name"
          android:alphabeticShortcut="string"
          android:alphabeticModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
          android:numericShortcut="string"
          android:numericModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
          android:checkable=["true" | "false"]
          android:visible=["true" | "false"]
          android:enabled=["true" | "false"]
          android:menuCategory=["container" | "system" | "secondary" | "alternative"]
          android:orderInCategory="integer" />
    <group android:id="@[+][package:]id/resource name"
           android:checkableBehavior=["none" | "all" | "single"]
           android:visible=["true" | "false"]
           android:enabled=["true" | "false"]
           android:menuCategory=["container" | "system" | "secondary" | "alternative"]
           android:orderInCategory="integer" >
        <item />
    </group>
    <item >
        <menu>
          <item />
        </menu>
    </item>
</menu>

ELEMENTS

<menu>

Required. 这必须是根节点。 包含 <item> 和/或 <group> 元素。

attributes
  • xmlns:android

    XML namespace. Required. 定义 XML 命名空间,它必须是「http://schemas.android.com/apk/res/android」。

<item>

一个菜单项。 可能包含一个 <menu> 元素(用于子菜单)。 必须是 <menu> 或 <group> 元素的子元素。

attributes
  • android:id

    Resource ID. 唯一的资源 ID。 要为此项创建新的资源 ID,请使用以下格式:「@+id/name」。 加号表示应该将其创建为新的 ID。

  • android:title

    String resource. 菜单标题,值为字符串资源或原始字符串。

  • android:titleCondensed

    String resource. 值为字符串资源或原始字符串的精简标题。 该标题用于标题太长的情况。

  • android:icon

    Drawable resource. 要用作菜单项图标的图像。

  • android:onClick

    Method name. 单击此菜单项时调用的方法。 该方法必须在 Activity 中声明为 public,并接受一个 MenuItem 作为其唯一参数,该参数指示单击的项目。 此方法优先于 onOptionsItemSelected() 的标准回调。

警告:如果您使用 ProGuard(或类似工具)对代码进行混淆处理,请确保将您在此属性中指定的方法从重命名中排除,因为它可能会破坏功能。

在 API 级别 11 中引入。

  • android:showAsAction

    Keyword. 何时以及如何将此项目显示为应用栏中的操作项目。 仅当 Activity 包含应用栏时,菜单项才可以作为操作项目出现。 有效值:

    Value Description
    ifRoom 只有在有空间的情况下,才能将此项放置在应用栏中。 如果所有标记为「ifRoom」的项目都没有空间,则具有最低 orderInCategory 值的项目显示为操作,其余项目显示在溢出菜单中。
    withText 还包括操作项目的标题文本(由 android:title 定义)。 你可以包含将此值连同其它值中的一个作为的标记集,这些值通过使用管道(
    never 切勿将此项放置在应用栏中。 相反,请在应用栏的溢出菜单中列出该项目。
    always 始终将此项目放置在应用栏中。 避免使用此项,除非项目始终显示在操作栏中至关重要。 设置多个项目始终显示为操作项目可能会导致它们与应用栏中的其他 UI 重叠。
    collapseActionView 与此操作项关联的操作视图(由 android:actionLayout 或 android:actionViewClass 声明)是可折叠的。在 API 级别 14 中引入。

    有关更多信息,请参阅添加应用栏培训课程。

    在 API 级别 11 中引入。

  • android:actionLayout

    Layout resource. 用作操作视图的布局。

    有关更多信息,请参阅操作视图和操作提供程序

    在 API 级别 11 中引入。

  • android:actionViewClass

    Class name. View 的完全限定类名称用作操作视图。 例如,「android.widget.SearchView」将 SearchView 用作操作视图。

    有关更多信息,请参阅操作视图和操作提供程序

    警告:如果使用 ProGuard(或类似工具)对代码进行混淆处理,请确保将您在此属性中指定的类从重命名中排除,因为它可能会破坏功能。

    在 API 级别 11 中引入。

  • android:actionProviderClass

    Class name. ActionProvider 用于代替操作项目的完全限定的类名称。 例如,「android.widget.ShareActionProvider」使用 ShareActionProvider

    有关更多信息,请参阅操作视图和操作提供程序

    警告:如果使用 ProGuard(或类似工具)对代码进行混淆处理,请确保将您在此属性中指定的类从重命名中排除,因为它可能会破坏功能。

    在 API 级别 14 中引入。

  • android:alphabeticShortcut

    Char. 字母快捷键的字符。

  • android:numericShortcut

    Interger. 数字快捷键的数字。

  • android:alphabeticModifiers

    Keyword. 菜单项的字母快捷键的修饰符。 默认值对应于 Control 键。 有效值:

    Value Description
    META 对应于 Meta 元键
    CTRL 对应于 Control 元键
    ALT 对应于 Alt 元键
    SHIFT 对应于 Shift 元键
    SYM 对应于 Sym 元键
    FUNCTION 对应于 Function 元键

    注意:您可以在属性中指定多个关键字。 例如,android:alphabeticModifiers=“CTRL|SHIFT” 表示要触发相应的菜单项,用户需要同时按下 Control 和 Shift 元键以及快捷键。

    您可以使用 setAlphabeticShortcut() 方法以编程方式设置属性值。 有关字母修饰符属性的更多信息,请转到 alphabeticModifiers

  • android:numericModifiers

    Keyword. 菜单项的数字快捷键的修饰符。 默认值对应于 Control 键。 有效值:

    Value Description
    META 对应于 Meta 元键
    CTRL 对应于 Control 元键
    ALT 对应于 Alt 元键
    SHIFT 对应于 Shift 元键
    SYM 对应于 Sym 元键
    FUNCTION 对应于 Function 元键

    注意:您可以在属性中指定多个关键字。 例如,android:numericModifiers=“CTRL|SHIFT” 表示要触发相应的菜单项,用户需要同时按下 Control 和 Shift 元键以及快捷键。

    您可以使用 setNumericShortcut() 方法以编程方式设置属性值。 有关字母修饰符属性的更多信息,请转到 numericModifiers

  • android:checkable

    Boolean. 如果此项可选中,则为「true」。

  • android:checked

    Boolean. 如果此项默认选中,则为「true」。

  • android:visible

    Boolean. 如果此项默认可见,则为「true」。

  • android:enabled

    Boolean. 如果此项默认启用,则为「true」。

  • android:menuCategory

    Keyword. 值对应于 Menu 的 CATEGORY_* 常量,其定义了项目的优先级。有效值为:

    Value Description
    container 针对属于容器一部分的项目。
    system 针对由系统提供的项目。
    secondary 针对用户提供的次要选项(不常用)的项目。
    alternative 针对对当前显示的数据进行替代操作的项目。
  • android:orderInCategory

    Integer. 该项目在组内的「重要性」顺序。

<group>

菜单组(用于创建共享特征的项目集合,例如它们是否可见,启用或可选中)。 包含一个或多个 <item> 元素。 必须是 <menu> 元素的子元素。

attributes
  • android:id

    Resource ID. 唯一的资源 ID。 要为此项创建新的资源 ID,请使用以下格式:「@+id/name」。 加号表示应该将其创建为新的 ID。

  • android:checkableBehavior

    Keyword. 组的可选中行为的类型。 有效值:

    Value Description
    none 不可选中
    all 所有项目都可选中(使用复选框 - checkbox)
    single 只有一个项目可选中(使用单选按钮 - radio button)
  • android:visible

    Boolean. 如果组是可见的,则为「true」。

  • android:enabled

    Boolean. 如果组是启用的,则为「true」。

  • android:menuCategory

    Keyword. 值对应于 Menu 的 CATEGORY_* 常量,其定义了组的优先级。有效值为:

    Value Description
    container 针对属于容器一部分的组。
    system 针对由系统提供的组。
    secondary 针对用户提供的次要选项(不常用)的组。
    alternative 针对对当前显示的数据进行替代操作的组。
  • android:orderInCategory

    Integer. 该项目在分类内的「重要性」顺序。

EXAMPLE

XML 文件保存在 res/menu/example_menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
          android:title="@string/item1"
          android:icon="@drawable/group_item1_icon"
          android:showAsAction="ifRoom|withText"/>
    <group android:id="@+id/group">
        <item android:id="@+id/group_item1"
              android:onClick="onGroupItemClick"
              android:title="@string/group_item1"
              android:icon="@drawable/group_item1_icon" />
        <item android:id="@+id/group_item2"
              android:onClick="onGroupItemClick"
              android:title="@string/group_item2"
              android:icon="@drawable/group_item2_icon" />
    </group>
    <item android:id="@+id/submenu"
          android:title="@string/submenu_title"
          android:showAsAction="ifRoom|withText" >
        <menu>
            <item android:id="@+id/submenu_item1"
                  android:title="@string/submenu_item1" />
        </menu>
    </item>
</menu>

以下应用代码从 [onCreateOptionsMenu(Menu)][] 回调中扩充菜单,并且还声明了两个项目的 on-click 回调:

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.example_menu, menu);
    return true;
}

public void onGroupItemClick(MenuItem item) {
    // One of the group items (using the onClick attribute) was clicked
    // The item parameter passed here indicates which item it is
    // All other menu item clicks are handled by onOptionsItemSelected()
}

String Resources

字符串资源为您的应用提供文本字符串,并提供可选的文本样式和格式。 有三种类型的资源可以为您的应用提供字符串:

  • String

    提供单个字符串的 XML 资源。

  • String Array

    提供字符串数组的 XML 资源。

  • Quantity Strings (Plurals)

    携带用于多元化的不同字符串的 XML 资源。

所有字符串都能够应用一些样式标记和格式参数。

String

可从应用或其他资源文件(例如 XML 布局)中引用的单个字符串。

注意:字符串是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将字符串资源与其中一个 XML 文件中的其他简单资源合并到一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。 <string> 元素的 name 用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 String 的资源指针。

RESOURCE REFERENCE

In Java: R.string.string_name
In XML:@string/string_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string
        name="string_name"
        >text_string</string>
</resources>

ELEMENTS

<resources>

Required. 这是根结点。

attributes

No attributes.

<string>

一个字符串,可以包含样式标签。 要小心,你必须避开撇号和引号。

attributes
  • name

    String. 字符串的名称。该名称用作资源 ID。

EXAMPLE

XML 文件保存在 res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello!</string>
</resources>

布局 XML 应用字符串到 View:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

应用代码获取字符串:

String string = getString(R.string.hello);

您可以使用 getString(int)getText(int) 来检索字符串。 getText(int) 保留应用于该字符串的任何富文本样式。

String Array

可以从应用引用的字符串数组。

注意:字符串数组是一个简单的资源,它使用 name 属性中提供的值(而不是 XML 文件的名称)进行引用。 因此,您可以将字符串数组资源与其中一个 XML 文件中的其他简单资源组合在一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。 <string-array> 元素的 name 用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 String 数组的资源指针。

RESOURCE REFERENCE

In Java: R.array.string_array_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array
        name="string_array_name">
        <item
            >text_string</item>
    </string-array>
</resources>

ELEMENTS

<resources>

Required. 这是根结点。

attributes

No attributes.

<string-array>

定义一个字符串数组。 包含一个或多个 <item> 元素。

attributes
  • name

    String. 数组的名称。该名称用作资源 ID 以引用数组。

<item>

一个字符串,可以包含样式标签。 该值可以是对另一个字符串资源的引用。 必须是 <string-array> 元素的子元素。 要小心,你必须避开撇号和引号。

attributes

No attributes.

EXAMPLE

XML 文件保存在 res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

应用代码获取一个字符串数组:

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

Quantity Strings (Plurals)

不同的语言对语法与数量的一致性有不同的规则。例如,在英语中,数量 1 是特例。我们写「1 本书」,但对于任何其他数量,我们会写「n 本书」。单数和复数之间的这种区分是非常普遍的,但其他语言更加细化。 Android 支持的全部集合为 zero、one、two、few、many 和 other。

决定用于给定语言和数量的情况的规则可能非常复杂,因此 Android 为您提供诸如 getQuantityString() 之类的方法来为您选择合适的资源。

尽管历史上称为「数量字符串」(并且仍然在 API 中称其为「数量字符串」),但数量字符串只能用于复数形式。例如,当存在未读消息时,使用数量字符串来实现诸如 Gmail 的「Inbox」与「Inbox(12)」之类的内容是错误的。使用数量字符串代替 if 语句似乎很方便,但需要注意的是,某些语言(如中文)根本不会进行这些语法区分,因此您总是会得到「other」字符串。

选择使用哪个字符串完全是基于语法的必要性。在英语中,即使数量为 0,zero 的字符串也被忽略,因为 0 在语法上不同于 2,或除 1 之外的任何其他数字(「zero books」,「one book」,「two books」等等)。相反,在朝鲜语中,只有 other 字符串被使用过。

不要被这样一个事实所误导,比如说,two 听起来只能用于数量 2:一种语言可能需要 2, 12, 102 等等都像 one another 对待,但不同于其他数量。依靠您的翻译员了解他们的语言实际上坚持了哪些区别。

通过使用「books: 1」等数量中性表达式来避免数量串常常是可能的。这使得您的生活和翻译人员的生活更轻松,如果这是您的应用可以接受的风格。

注意:复数集合是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。因此,您可以在一个 <resources> 元素下将复数资源与其他简单资源结合在一个 XML 文件中。

FILE LOCATION

res/values/filename.xml
文件名是任意的。 <plurals> 元素的 name 用作资源 ID。

RESOURCE REFERENCE

In Java: R.plurals.plural_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals
        name="plural_name">
        <item
            quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
            >text_string</item>
    </plurals>
</resources>

ELEMENTS

<resources>

Required. 这是根结点。

attributes

No attributes.

<plurals>

字符串的集合,其中,根据事物的数量提供一个字符串。 包含一个或多个 <item> 元素。

attributes
  • name

    String. 一对字符串的名称。名称用于资源 ID.

<item>

复数或单数字符串 该值可以是对另一个字符串资源的引用。 必须是 <plurals> 元素的子元素。 要小心,你必须避开撇号和引号。

attributes
  • quantity

    Keyword. 指示何时应使用此字符串的值。 有效值,括号中包含非详尽的示例:

    Value Description
    zero 当语言需要对数字 0 进行特殊处理时(如阿拉伯语)。
    one 当语言需要对类似 one 这样的数字进行特殊处理时(例如英语和大多数其他语言中的数字 1;俄语中,任何以 1 结尾但不以 11 结尾的数字都在此类中)。
    two 当语言需要对类似 two 这样的数字进行特殊处理时(如威尔士语中的 2,斯洛文尼亚语中的 102)。
    few 当语言要求对「small - 小」的数字进行特殊处理时(如捷克语中的 2, 3 和 4;或者结尾 2, 3 或 4 但不是 12, 13 或 14 的波兰语中的数字)。
    many 当语言需要对「large - 大」的数字进行特殊处理时(如马耳他语以 11 - 99 结尾的数字)。
    other 当语言不需要对给定数量进行特殊处理时(如所有中文数字,或英文中的 42)。

EXAMPLE

XML 文件保存在 res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <!--
             As a developer, you should always supply "one" and "other"
             strings. Your translators will know which strings are actually
             needed for their language. Always include %d in "one" because
             translators will need to use %d for languages where "one"
             doesn't mean 1 (as explained above).
          -->
        <item quantity="one">%d song found.</item>
        <item quantity="other">%d songs found.</item>
    </plurals>
</resources>

XML 文件保存在 res/values-pl/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <item quantity="one">Znaleziono %d piosenkę.</item>
        <item quantity="few">Znaleziono %d piosenki.</item>
        <item quantity="other">Znaleziono %d piosenek.</item>
    </plurals>
</resources>

Java 代码:

int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);

当使用 getQuantityString() 方法时,如果字符串包含带数字的字符串格式,则需要传递 count 两次。 例如,对于找到的字符串 %d songs,第一个 count 参数选择适当的复数字符串,并将第二个 count 参数插入到 %d 占位符中。 如果您的复数字符串不包含字符串格式,则不需要将第三个参数传递给 getQuantityString。

Formatting and Styling

这里有几件重要的事情你应该知道如何正确地格式化和样式化你的字符串资源。

Escaping apostrophes and quotes

如果字符串中有撇号('),则必须使用反斜杠(')将其转义,或将该字符串用双引号(“”)括起来。 例如,下面是一些可以使用和不使用的字符串:

<string name="good_example">This\'ll work</string>
<string name="good_example_2">"This'll also work"</string>
<string name="bad_example">This doesn't work</string>
    <!-- Causes a compile error -->

如果您的字符串中有双引号,则必须将其转义(\“)。用单引号括起字符串不起作用。

<string name="good_example">This is a \"good string\".</string>
<string name="bad_example">This is a "bad string".</string>
    <!-- Quotes are stripped; displays as: This is a bad string. -->
<string name="bad_example_2">'This is another "bad string".'</string>
    <!-- Causes a compile error -->

Formatting strings

如果您需要格式化字符串,则可以将格式参数放入字符串资源中,如以下示例资源所示。

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

在这个例子中,格式字符串有两个参数:%1$s 是一个字符串,%2$d 是一个十进制数。 然后,通过调用 getString(int,Object…) 来格式化字符串。 例如:

String text = getString(R.string.welcome_messages, username, mailCount);

Styling with HTML markup

您可以使用 HTML 标记将样式添加到字符串中。 例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="welcome">Welcome to <b>Android</b>!</string>
</resources>

受支持的 HTML 元素包括:

  • <b> 用于粗体文字。
  • <i> 用于_斜体_文本。
  • <u> 用于下划线文字。

在某些情况下,您可能需要创建一个样式文本资源,该资源也用作格式字符串。 通常,这不起作用,因为 format(String, Object…) 和 getString(int, Object…) 方法会从字符串中去除所有样式信息。 解决此问题的方法是将带有转义实体的 HTML 标记写入,然后在格式化后使用 fromHtml(String) 进行恢复。 例如:

  1. 将样式化文本资源存储为 HTML 转义字符串:
<resources>
  <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

在这个格式化的字符串中,添加了一个 <b> 元素。 注意,左括号是 HTML 转义的,使用 &lt; 符号。

  1. 然后像往常一样格式化字符串,但也可以调用 fromHtml(String) 将 HTML 文本转换为样式文本:
String text = getString(R.string.welcome_messages, username, mailCount);
CharSequence styledText = Html.fromHtml(text);

由于 fromHtml(String) 方法对所有 HTML 实体进行格式化,因此请务必使用 htmlEncode(String) 转义您使用格式化文本的字符串中的任何可能的 HTML 字符。 例如,如果你要格式化一个包含「<」或「&」等字符的字符串,那么它们必须在格式化之前进行转义,这样当格式化字符串传递给 fromHtml(String) 时,字符就会按照它们原先写的方式出现。 例如:

String escapedUsername = TextUtil.htmlEncode(username);

String text = getString(R.string.welcome_messages, escapedUsername, mailCount);
CharSequence styledText = Html.fromHtml(text);

Styling with Spannables

Spannable 是一个文本对象,您可以使用字体属性(如颜色和字体粗细)进行样式设置。 使用 SpannableStringBuilder 构建文本,然后将 android.text.style 软件包中定义的样式应用于文本。

您可以使用以下辅助方法来设置创建可跨越文本的大部分工作:

/**
 * Returns a CharSequence that concatenates the specified array of CharSequence
 * objects and then applies a list of zero or more tags to the entire range.
 *
 * @param content an array of character sequences to apply a style to
 * @param tags the styled span objects to apply to the content
 *        such as android.text.style.StyleSpan
 *
 */
private static CharSequence apply(CharSequence[] content, Object... tags) {
    SpannableStringBuilder text = new SpannableStringBuilder();
    openTags(text, tags);
    for (CharSequence item : content) {
        text.append(item);
    }
    closeTags(text, tags);
    return text;
}

/**
 * Iterates over an array of tags and applies them to the beginning of the specified
 * Spannable object so that future text appended to the text will have the styling
 * applied to it. Do not call this method directly.
 */
private static void openTags(Spannable text, Object[] tags) {
    for (Object tag : tags) {
        text.setSpan(tag, 0, 0, Spannable.SPAN_MARK_MARK);
    }
}

/**
 * "Closes" the specified tags on a Spannable by updating the spans to be
 * endpoint-exclusive so that future text appended to the end will not take
 * on the same styling. Do not call this method directly.
 */
private static void closeTags(Spannable text, Object[] tags) {
    int len = text.length();
    for (Object tag : tags) {
        if (len > 0) {
            text.setSpan(tag, 0, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        } else {
            text.removeSpan(tag);
        }
    }
}

以下 bold,italic 和 color 方法显示如何调用辅助方法以应用 android.text.style 软件包中定义的样式。 您可以创建类似的方法来完成其他类型的文本样式。

/**
 * Returns a CharSequence that applies boldface to the concatenation
 * of the specified CharSequence objects.
 */
public static CharSequence bold(CharSequence... content) {
    return apply(content, new StyleSpan(Typeface.BOLD));
}

/**
 * Returns a CharSequence that applies italics to the concatenation
 * of the specified CharSequence objects.
 */
public static CharSequence italic(CharSequence... content) {
    return apply(content, new StyleSpan(Typeface.ITALIC));
}

/**
 * Returns a CharSequence that applies a foreground color to the
 * concatenation of the specified CharSequence objects.
 */
public static CharSequence color(int color, CharSequence... content) {
    return apply(content, new ForegroundColorSpan(color));
}

以下是如何串联这些方法以创建具有适用于单个词的不同类型样式的字符序列的示例:

// Create an italic "hello, " a red "world",
// and bold the entire sequence.
CharSequence text = bold(italic(getString(R.string.hello)),
    color(Color.RED, getString(R.string.world)));

Style Resource

样式资源定义格式并查找 UI。 样式可以应用于单个 View(从布局文件中)或整个 Activity或应用(从清单文件中)。

有关创建和应用样式的更多信息,请阅读样式和主题

注意:样式是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将样式资源与其他简单资源合并到一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。 该元素的名称将被用作资源 ID。

RESOURCE REFERENCE

In XML: @[package:]style/style_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style
        name="style_name"
        parent="@[package:]style/style_to_inherit">
        <item
            name="[package:]style_property_name"
            >style_value</item>
    </style>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<style>

定义一个单一样式。包含 <item> 元素。

attributes
  • name

    String. Required. 样式的名称,用作将样式应用于 View,Activity 或应用的资源 ID。

  • parent

    Style resource. 引用此样式应从中继承样式属性的样式。

<item>

为该样式定义单个属性。 必须是 <style> 元素的子元素。

attributes
  • name

    Attribute resource. Required. 要定义的样式属性的名称,必要时使用软件包前缀(例如 android:textColor)。

EXAMPLE

样式的 XML 文件(保存在 res/values/):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomText" parent="@style/Text">
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#008</item>
    </style>
</resources>

应用样式到 TextView 的 XML 文件(保存在 res/layout/):

<?xml version="1.0" encoding="utf-8"?>
<EditText
    style="@style/CustomText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello, World!" />

Font Resources

字体资源定义了您可以在您的应用中使用的自定义字体。 字体可以是单独的字体文件或一组字体文件,称为字体系列,并在 XML 中定义。

Bundled font

您可以将字体捆绑为应用中的资源。 字体被编译到 R 文件,并可作为资源在系统中自动使用。 然后您可以借助字体资源类型访问这些字体。

FILE LOCATION

res/font/filename.ttf (.ttf, .ttc, .otf, or .xml)
文件名用作资源 ID。

RESOURCE REFERENCE

In XML: @[package:]font/font_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<font-family>
  <font
    android:font="@[package:]font/font_to_include"
    android:fontStyle=["normal" | "italic"]
    android:fontWeight="weight_value" />
</font-family>

ELEMENTS

<font-family>

Required. 这个必须是根结点。

attributes

No attributes.

<font>

定义一个家族内的单一字体。 不包含任何子节点。

attributes
  • android:fontStyle

    Keyword. 定义字体样式。 当字体加载到字体堆栈并覆盖字体头部表中的任何样式信息时使用此属性。 如果您未指定属性,则应用使用字体头部表中的值。 常量值必须是 normal 或 italic。

  • android:fontWeight

    Interger. 字体的权重。 当字体被加载到字体堆栈并覆盖字体头部表中的任何权重信息时使用该属性。 属性值必须是正数,100 的倍数,以及 100 和 900 之间的数值。 如果您未指定属性,则应用将使用字体头部表中的值。最常见的值为常规权重为 400,粗体权重为 700。

EXAMPLE

XML 文件保存在 res/font/lobster.xml:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

将字体应用于 TextView 的 XML 文件保存在 res/layout/ 中:

<?xml version="1.0" encoding="utf-8"?>
<EditText
    android:fontFamily="@font/lobster"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello, World!" />

Downloadable font

可下载的字体资源定义您可以在应用中使用的自定义字体。 该字体在应用本身中不可用; 而是从字体提供者中检索字体。

FILE LOCATION

res/font/filename.xml
文件名用作资源 ID。

RESOURCE REFERENCE

In XML:@[package:]font/font_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<font-family
    android:fontProviderAuthority="authority"
    android:fontProviderPackage="package"
    android:fontProviderQuery="query"
    android:fontProviderCerts="@[package:]array/array_resource" />

ELEMENTS

<font-family>

Required. 这个必须是根结点。

attributes
  • android:fontProviderAuthority

    String. Required. 定义字体请求的字体提供者的权限。

  • android:fontProviderPackage

    String. Required. 要用于请求的 Font Provider 的包名称。 这用于验证提供者的身份。

  • android:fontProviderQuery

    String. Required. 字体的字符串查询。 有关此字符串格式的信息,请参阅您的字体提供商的文档。

  • android:fontProviderCerts

    Array resource. Required. 定义用于签署此提供程序的证书的散列集。 这用于验证提供者的身份,并且仅在提供者不是系统映像的一部分时才需要。 该值可以指向单个列表(字符串数组资源)或列表的列表(数组资源),其中每个列表代表一个签名哈希集合。 有关这些值,请参阅您的字体提供商的文档。

EXAMPLE

XML 文件保存在 res/font/lobster.xml:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
    android:fontProviderAuthority="com.example.fontprovider.authority"
    android:fontProviderPackage="com.example.fontprovider"
    android:fontProviderQuery="Lobster"
    android:fontProviderCerts="@array/certs">
</font-family>

定义证书数组的 XML 文件保存在 res/values/:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="certs">
      <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
    </string-array>
</resources>

将字体应用于 TextView 的 XML 文件保存在 res/layout/ 中:

<?xml version="1.0" encoding="utf-8"?>
<EditText
    android:fontFamily="@font/lobster"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello, World!" />

More Resource Types

Bool

XMl 中定义的布尔值。

注意:bool 是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将 bool 资源与其他简单资源组合在一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。<bool> 元素的 name 将用作资源 ID。

RESOURCE REFERENCE

In Java: R.bool.bool_name
In XML: @[package:]bool/bool_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<bool>

一个布尔值:true 或 false。

attributes
  • name

    String. 布尔值的名称。这将用作资源 ID。

EXAMPLE

XML 文件保存在 res/values-small/bools.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>
    <bool name="adjust_view_bounds">true</bool>
</resources>

应用代码获取布尔值:

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

布局 XML 应用布尔值到一个属性:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

Color

XML 中定义的颜色值。 颜色用 RGB 值和 alpha 通道指定。 您可以在任何接受十六进制颜色值的地方使用颜色资源。 当 XML 中需要绘制资源时(例如, android:drawable=“@color/green”),您也可以使用颜色资源。

该值始终以英镑(#)字符开头,然后是以下列格式之一的 Alpha-Red-Green-Blue 信息:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

注意:color 是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将颜色资源与其他简单资源组合在一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/colors.xml
文件名是任意的。<color> 元素的 name 将用作资源 ID。

RESOURCE REFERENCE

In Java: R.color.color_name
In XML: @[package:]color/color_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<color>

如上所述,以十六进制表示颜色。

attributes
  • name

    String. 颜色的名称。这将用作资源 ID。

EXAMPLE

XML 文件保存在 res/values/colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

应用代码获取颜色资源:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

布局 XML 应用颜色到一个属性:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

Dimension

XML 中定义的尺寸值。 尺寸是用一个数字和一个紧随的度量单位来指定的。 例如:10px,2in,5sp。 Android 支持以下计量单位:

  • dp

    与密度无关的像素 - 基于屏幕物理密度的抽象单位。 这些单位相对于 160 dpi(dots per inch - 每英寸点数)屏幕,其中 1dp 大约等于 1px。 当在更高密度的屏幕上运行时,用于绘制 1dp 的像素数量将按照适合屏幕的 dpi 的比例放大。 同样,在密度较低的屏幕上,用于 1dp 的像素数量将缩小。 dp 与像素的比率将随着屏幕密度而变化,但不一定成正比。 使用 dp 单位(而不是 px 单位)是使布局中的视图尺寸适合不同屏幕密度的简单解决方案。 换句话说,它为不同设备上的 UI 元素的实际尺寸提供了一致性。

  • sp

    与缩放无关的像素 - 这与 dp 单位相似,但也会根据用户的字体大小偏好进行缩放。 建议您在指定字体大小时使用此单位,以便针对屏幕密度和用户偏好进行调整。

  • pt

    点数 - 基于屏幕物理尺寸的 1/72 英寸,假设 72dpi 密度屏幕。

  • px

    像素 - 对应屏幕上的实际像素。 不建议使用此单位,因为实际表示可能因设备而异; 每个设备每英寸可能具有不同数量的像素,并且可能具有更多或更少的屏幕上可用的总像素。

  • mm

    毫米 - 基于屏幕的物理尺寸。

  • in

    英寸 - 基于屏幕的物理尺寸。

注意:尺寸是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将尺寸资源与其他简单资源组合在一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。<dimen> 元素的 name 将用作资源 ID。

RESOURCE REFERENCE

In Java: R.dimen.dimension_name
In XML: @[package:]dimen/dimension_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<dimen>

如上所述,表现为浮点数后跟随测量单位(dp、sp、pt、px、mm、in)的尺寸。

attributes
  • name

    String. 尺寸的名称。这将用作资源 ID。

EXAMPLE

XML 文件保存在 res/values/dimens.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

应用代码获取尺寸:

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

布局 XML 应用尺寸到一个属性:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

ID

XML 中定义的唯一资源 ID。 使用您在 <item> 元素中提供的名称,Android 开发人员工具会在项目的 R.java 类中创建一个唯一的整数,您可以将其用作应用资源的标识符(例如,UI 布局中的 View) 或用于应用代码的唯一整数(例如,作为对话框的 ID 或结果代码)。

注意:ID 是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将 ID 资源与其他简单资源合并到一个 XML 文件中的一个 <resources> 元素下。 此外,请记住 ID 资源不会引用实际的资源项目; 它只是一个唯一的 ID,您可以将其附加到其他资源或在应用中用作唯一整数。

FILE LOCATION

res/values/filename.xml
文件名是任意的。

RESOURCE REFERENCE

In Java: R.id.name
In XML: @[package:]id/name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<item>

定义一个唯一的 ID。 没有值,只有属性。

attributes
  • type

    必须是「id」。

  • name

    String. ID 的唯一名称。

EXAMPLE

XML 文件保存在 res/values/ids.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="button_ok" />
    <item type="id" name="dialog_exit" />
</resources>

然后,这个布局片段使用Button按钮的「button_ok」 ID:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

请注意,android:id 值不包含 ID 引用中的加号,因为该 ID 已存在,如上面的 ids.xml 示例中所定义。 (当你使用加号在 XML 资源中指定一个 ID,其格式为 android:id=“@+id/name” - 这意味着「name」ID 不存在并且应该被创建。)

作为另一个例子,下面的代码片段使用「dialog_exit」ID 作为对话的唯一标识符:

showDialog(R.id.dialog_exit);

在同一个应用中,创建对话框时会比较「dialog_exit」ID:

protected Dialog onCreateDialog(int)(int id) {
    Dialog dialog;
    switch(id) {
    case R.id.dialog_exit:
        ...
        break;
    default:
        dialog = null;
    }
    return dialog;
}

Integer

XML 中定义的整数。

注意:整数是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将整数资源与其他简单资源合并到一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。<integer> 元素的 name 将用作资源 ID。

RESOURCE REFERENCE

In Java: R.integer.integer_name
In XML: @[package:]integer/integer_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<integer>

一个整数。

attributes
  • name

    String. 整数的名称。这将用作资源 ID。

EXAMPLE

XML 文件保存在 res/values/integers.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max_speed">75</integer>
    <integer name="min_speed">5</integer>
</resources>

应用代码获取整数:

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

Integer Array

XML 中定义的整数数组。

注意:整数数组是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将整数数组资源与其他简单资源合并到一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。<integer-array> 元素的 name 将用作资源 ID。

COMPILED RESOURCE DATATYPE

指向整数数组的资源指针。

RESOURCE REFERENCE

In Java: R.array.integer_array_name
In XML: @[package:]array.integer_array_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<integer-array>

定义一个整数数组。包含一个或多个 <item> 元素。

attributes
  • android:name

    String. 数组的名称。这将用作资源 ID 来引用数组。

<item>

一个整数。该值可能引用另一个整数资源。必须是 <integer-array> 元素的子元素。

attributes

No attributes.

EXAMPLE

XML 文件保存在 res/values/integers.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>
</resources>

应用代码获取整数数组:

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

Typed Array

在 XML 中定义的 TypedArray。 您可以使用它来创建其他资源的数组,例如 drawables。 请注意,数组并非必须是同类的,所以您可以创建一个混合资源类型的数组,但您必须知道数组中的数据类型在哪里以及在哪里,以便您可以使用 TypedArray 的 get…() 方法。

注意:类型数组是使用 name 属性中提供的值(而不是 XML 文件的名称)引用的简单资源。 因此,您可以将类型数组资源与其他简单资源合并到一个 XML 文件中的一个 <resources> 元素下。

FILE LOCATION

res/values/filename.xml
文件名是任意的。<array> 元素的 name 将用作资源 ID。

COMPILED RESOURCE DATATYPE

指向 TypedArray 的资源指针。

RESOURCE REFERENCE

In Java: R.array.array_name
In XML: @[package:]array.array_name

SYNTAX

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>

ELEMENTS

<resources>

Required. 这必须是根结点。

attributes

No attributes.

<array>

定义一个数组。包含一个或多个 <item> 元素。

attributes
  • android:name

    String. 数组的名称。这将用作资源 ID 来引用数组。

<item>

通用资源。 该值可以是对资源或简单数据类型的引用。 必须是 <array> 元素的子元素。

attributes

No attributes.

EXAMPLE

XML 文件保存在 res/values/arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

应用代码获取每一个数组,之后获取每个数组的第一个条目:

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);

References

  1. Resource Types
  2. Animation
  3. Color
  4. Drawable
  5. Layout
  6. Menu
  7. String
  8. Style
  9. Font
  10. More Resource Type