Android应用中的其他资源类型(More Types Resources)

本文档介绍Android系统其他可定义在代码外部的资源,主要包括:

  • Bool型资源:

    定义布尔值的XML资源。
  • Color型资源:

    定义颜色值的XML资源(十六进制颜色值)。
  • Dimension型资源:

    定义尺寸的XML资源(带有尺寸单位)。
  • ID型资源:

    给应用程序资源和组件提供唯一标识的XML资源。
  • Integer型资源:

    定义整数值的XML资源。
  • Integer Array型资源:

    定义整数数组的XML资源。
  • Typed Array型资源:

    提供了TypeArray对象的XML资源(如drawble资源数组)。

Bool型资源

在XML中定义布尔值。

注意:布尔值是一种简单的资源,使用name属性提供的值来引用这个资源。如,可以把布尔值资源与其他简单资源组合在一个XML文件的元素下。

文件位置(FILE LOCATION):

res/values/filename.xml
文件名是任意的。元素的name属性值被用作资源ID。

资源应用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.bool.bool_name;
  • 在XML中:
    @[package:]bool/bool_name。

语法(STNTAX):

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

元素(ELEMENTS):

<resources>元素

必须的,它必须是根节点。没有属性。

<bool>元素

定义了一个布尔值:true或false

<bool>元素属性(ATTRIBUTES):

name——字符串值,给布尔值定义一个名称,这个名称被用作资源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

注意:颜色资源是一种简单的资源,使用name属性提供的值来引用资源。如,能够把颜色资源跟其他的简单资源组合在一个XML文件的<resources>元素中。

文件位置(FILE LOCATION):

res/values/colors.xml
文件名是任意的,<color>元素的name属性值会被用作资源ID。

资源引用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.color.color_name
  • 在XML中:
    @[package:]color/color_name

语法(SYNTAX):

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

元素(ELEMENTS):

<resources>元素

必须的,它必须是根节点,没有属性。

<color>元素

用上面介绍的十六进制格式来表示一个颜色值。

<color>元素属性:

name——字符串值。给颜色资源指定一个名称,这个name属性的值会被用作资源的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

    密度无关的像素,它是基于屏幕的物理密度的一种抽象单位。相对与160dpi(每英寸的点数)的屏幕,每1dp大致等于1px。当运行在高密度的屏幕上时,用于描画1dp的像素数会适应屏幕的dpi的要求来进行放大。同样,当在低密度屏幕上时,1dp的像素也会被缩小。从dp到pixel的转换比率会随着屏幕的密度来改变,但是不一定成正比。使用dp作为单位(代替px单位)是一个中简单的解决方案,它会让布局中View对象针对不同的屏幕密度来进行正确的调整。换句话说,它提供了UI元素的实际尺寸在不同设备上的一致性。

  • sp

    尺寸无关的像素,它有点像dp单位,但是它也会根据用户的字体尺寸选择来进行缩放。它被推荐用于指定字体的尺寸,以便文字能够针对屏幕的密度和用户的选择来调整。

  • pt

    点数,基于屏幕的物理尺寸,确定1/72英寸中的点数。

  • px

    像素,跟屏幕上的实际像素相对应。不推荐使用这个尺寸单位,因为实际上要适应各种不同的设备,每个设备每英寸的像素数量都可能不同,并且屏幕上可能会有更多或更少的总的可用的像素。

  • mm

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

  • in

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

注意:尺寸资源是一种简单的资源,可以使用其name属性提供的值来引用这种资源。如,能够把尺寸资源跟其他简单资源组合在一个XML文件的元素中。

文件位置(FILE LOCATION):

res/values/filename.xml
文件名是任意的,<dimen>元素的name属性值会被用于资源ID。

资源引用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.dimen.dimension_name
  • 在XML中:
    @[package:]dimen/dimension_name

语法(SYNTAX):

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

元素(ELEMENTS):

<resources>元素

必须的,它必须是根节点。没有属性。

<dimen>元素

它定义一个尺寸值,用带有尺寸单位(dp、sp、pt、px、mm、in)的浮点数来表示。

<dimen>元素属性:

name——字符串值,它定义了这个尺寸的名称,属性值被用作资源的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属性提供的值来引用资源。如,能够把ID资源与其他简单资源组合到一个XML文件的<resources>元素下。还有,要记住的是:ID资源不引用实际的资源项目,它只是一个能够跟其他资源绑定唯一ID,或是程序中使用的唯一整数。

文件位置(FILE LOCATION):

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

资源引用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.id.name
  • 在XML中:
    @[package:]id/name

语法(SYNTAX):

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

元素(ELEMENTS):

<resources>元素

必须的,它必须是根节点,没有属性。

<item>元素

定义一个唯一ID,不需要值。

<item>元素属性:

type:必须设置为”id”

name:字符串值,给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_ok的ID资源设定给布局中的一个Button控件的方法:

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

要注意的是:android:id属性的值在引用ID资源时没有包含“+”号,因为这个ID已经存在了,它在ids.xml文件中已经被定义了。(当使用“+”号指定资源ID时,如:android:id=”@+id/name”,则意味着这个ID不存在,应该给这个资源创建一个新的ID。)

在下面的示例中,代码使用中使用了“dialog_exit”ID来唯一标识一个对话框:

showDialog(R.id.dialog_exit);

以下代码通过比较“dialog_exit”ID来创建对话框:

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

整数型资源

在XML中定义的整数。

注意:整数是一个简单的资源,用name属性提供的值来引用资源。如,能够把整数型资源跟其他简单的资源组合在一个XML文件的<resources>元素下。

文件位置(FILE LOCATION):

res/values/filename.xml
文件名是任意的,<integer>元素的name属性值被用于资源ID。

资源引用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.integer.integer_name
  • 在XML中:
    @[package:]integer/integer_name

语法(SYNTAX):

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

元素(ELEMENTS):

<resources>元素

必须的,它必须是根节点,没有属性。

<integer>元素

它声明一个整数。

<integer>元素属性

name——字符串值,它给整数定义了一个名称,它的值被用于资源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文件的<resources>元素下。

文件位置(FILE LOCATION):

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

被编译资源的数据类型(COMPILED RESOURCE DATATYPE):

资源指向一个整数数组。

资源应用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.array.integer_array_name
  • 在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>元素

必须的,它必须是根节点,没有属性。

<integer-array>元素

它定义一个整数数组,包含一个或多个子元素。

<integer-array>元素属性

Android:name——字符串值,给数组定义一个名称。这个名称被用作资源ID。

<item>元素

定义一个整数。它的值能够是另一个整数资源的引用。它必须是元素的子元素,没有属性。

例子(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中定义一个TypeArray型的资源。可以使用这种资源类型来创建其他类型资源的数组,如可绘制资源。要注意的是,这个数组不需要是相同类型的,因此可以创建一个混合资源类型的数组,但是必须要知道数组中资源的数据类型,以便能够用TypedArray的get…()方法来正确的获取每一个项目。

注意:类型数组一种简单的资源,使用name属性中提供的值来引用资源。如,能够把类型数组资源跟其他类型的简单资源组合在一个XML文件的<resources>元素下:

文件位置(FILE LOCATION):

res/values/filename.xml
文件名是任意的。<array>元素的name属性值被用于资源ID。

被编译资源的数据类型(COMPILED RESOURCE DATATYPE):

资源指向一个TypedArray对象。

资源应用(RESOURCE REFERENCE):

  • 在Java代码中:
    R.array.array_name
  • 在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>元素

必须的,它必须是根节点,没有属性。

<array>元素

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

<array>元素属性

android:name——字符串值,它指定了这个数组的名称,名称的值被用作资源的ID。

<item>元素

它声明一个普通的资源,它的值能够是一个资源的引用或是一个简单的数据类型,它必须是元素的子元素。它没有属性。

例子(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);
Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1