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