Android 资源基础知识

几乎所有 Android 应用程序中都有某种资源:它们通常至少具有 XML 文件格式的用户界面布局。 首次创建 Xamarin.Android 应用程序时,默认资源由 Xamarin.Android 项目模板设置:

构成默认资源的五个文件是在 Resources 文件夹中创建的:

  • Icon.png - 应用程序的默认图标

  • Main.axml – 应用程序的默认用户界面布局文件。 请注意,虽然 Android 使用 .xml 文件扩展名,但 Xamarin.Android 使用 .axml 文件扩展名。

  • Strings.xml - 一个字符串表,用于帮助应用程序本地化

  • AboutResources.txt – 这不是必需的,可以安全地删除。 它只是提供 Resources 文件夹和其中文件的高级概述。

  • Resource.designer.cs – 此文件由 Xamarin.Android 自动生成和维护,并保存分配给每个资源的唯一 ID。 这与用 Java 编写的 Android 应用程序具有的 R.java 文件非常相似且完全相同。 它由 Xamarin.Android 工具自动创建,并会不时重新生成。

创建和访问资源

创建资源就像将文件添加到有关资源类型的目录一样简单。 下面的屏幕截图显示已将德语区域设置的字符串资源添加到项目中。 将Strings.xml添加到该文件后,Xamarin.Android 工具会自动将生成操作设置为 AndroidResource

这允许 Xamarin.Android 工具正确编译资源并将其嵌入到 APK 文件中。 如果由于某种原因 ,生成操作 未设置为 Android 资源,则文件将从 APK 中排除,任何加载或访问资源的尝试都将导致运行时错误,并且应用程序将崩溃。

此外,请务必注意,虽然 Android 仅支持资源项的小写文件名,但 Xamarin.Android 更宽容一些;它将支持大写和小写文件名。 图像名称的约定是使用小写和下划线作为分隔符 (例如 ,my_image_name.png) 。 请注意,如果将短划线或空格用作分隔符,则无法处理资源名称。

将资源添加到项目后,可通过两种方式在应用程序中使用这些资源 : 以编程方式在代码) 内 (,或从 XML 文件中使用。

以编程方式引用资源

若要以编程方式访问这些文件,会为其分配唯一的资源 ID。 此资源 ID 是在名为 Resource的特殊类中定义的整数,可在 Resource.designer.cs 文件中找到,如下所示:

public partial class Resource
{
    public partial class Attribute
    {
    }
    public partial class Drawable {
        public const int Icon=0x7f020000;
    }
    public partial class Id
    {
        public const int Textview=0x7f050000;
    }
    public partial class Layout
    {
        public const int Main=0x7f030000;
    }
    public partial class String
    {
        public const int App_Name=0x7f040001;
        public const int Hello=0x7f040000;
    }
}

每个资源 ID 都包含在对应于资源类型的嵌套类中。 例如,将文件 Icon.png 添加到项目时,Xamarin.Android 更新了 Resource 类,并创建了名为 的 Drawable 嵌套类,其中包含名为 的 Icon常量。 这允许在代码Resource.Drawable.Icon将Icon.png的文件称为 。 Resource不应手动编辑类,因为对类所做的任何更改都将被 Xamarin.Android 覆盖。

在代码) 中以编程方式 (引用资源时,可以通过使用以下语法的 Resources 类层次结构进行访问:

[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName – 提供资源的包,仅在使用其他包中的资源时才需要。

  • ResourceType – 这是上述 Resource 类中的嵌套资源类型。

  • 资源名称 – 这是资源 (的文件名,不带扩展名) 或 XML 元素中资源的 android:name 属性值。

从 XML 引用资源

XML 文件中的资源通过以下特殊语法进行访问:

@[<PackageName>:]<ResourceType>/<ResourceName>
  • PackageName – 提供资源的包,仅在使用其他包中的资源时才需要。

  • ResourceType – 这是 Resource 类中的嵌套资源类型。

  • 资源名称 – 这是资源 (的文件名, 不带 文件类型扩展名) 或 android:name XML 元素中资源的 属性值。

例如,布局文件 Main.axml 的内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <ImageView android:id="@+id/myImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/flag" />
</LinearLayout>

此示例包含一个 ImageView ,它需要一个名为 标志的可绘制资源。 其ImageViewsrc属性设置为 @drawable/flag。 活动开始时,Android 会在目录 “资源/绘制对象 ”中查找名为 flag.png 的文件, (文件扩展名可能是另一种图像格式,例如 flag.jpg) 并加载该文件并将其显示在 中 ImageView。 运行此应用程序时,它将如下图所示:

本地化的 ImageView