[译]:Xamarin.Android应用基础——Android资源基础

标签: Xamarin.Android, 官方教程, 中文翻译

博客分类: 官方教程

返回索引目录
原文链接:Android Resource Basics
译文链接:Xamarin.Android应用基础——Android资源基础

Part 1 - Android资源基础

几乎所有Android应用都多少有些资源,至少他们通常会有xml文件格式的用户界面布局文件。当Xamarin.Android应用首次创建时,Xamarin.Android项目模板会添加一些默认资源:

Resource文件夹中的默认资源主要有以下五个文件:

  • Icon.png - 应用的默认图标
  • Main.axml - 应用的默认用户界面布局文件。注意:Android中使用.xml文件后缀,在Xamarin.Android中使用.axml文件后缀。
  • String.xml - 应用的字符串对应关系表,可以辅助实现本地化。
  • Resource.designer.cs - 本文件由Xamarin.Android自动生成与维护,并且其中为每个资源分配了唯一的ID标识。这与使用Java编写Android应用时,所用的R.java文件非常相似。它由Xamarin.Android工具自动创建,并会不时地重新生成。
  • AboutResources.txt - 本文件不是必需的,可以安全删除。它仅仅提供针对资源及其内的文件进行高级概述。

资源的创建与访问

创建资源就像向相关资源类型目录中添加文件一样简单。下面截图中展示了为项目添加字符串资源来支持德语环境。当添加了String.xml后,Xamarin.Android 工具会自动执行构建操作来设置Android资源:

这样,可以允许Xamarin.Android工具正确的编译并将资源文件嵌入到APK文件中。如果由于某些原因,构建操作没有将文件设置到 Android Resource,那样文件会被排除在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字段。此时,文件Icon.png可以通过代码Resource.Drawable.Icon来进行引用。Resource类不应该手动修改,因为任何修改都会被Xamarin.Android重写。

当在代码中使用编程方式引用资源时,可以使用如下层级结构代码语法进行访问:

@[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName - 提供资源的包,只有在使用来自其他包的资源时才需要。
  • ResourceType - 如上所述 ,它是一个Resource类的内嵌资源类型。
  • Resource Name - 资源文件的名称(不含后缀名)或者是在XML元素中为资源设置的android:name属性的值。

在XML中使用资源

在XML文件中访问资源时,使用如下特殊语法:

@[<PackageName>:]<ResourceType>/<ResourceName>.
  • PackageName - 只有在使用来自其他包的资源时才需要。
  • ResourceType - Resource类中的嵌套资源类型。
  • Resource Name - 资源文件的名称(不含后缀名)或者是在XML元素中为资源设置的android:name属性的值。

例如在布局文件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控件,其使用了drawable资源中的名为flag的资源。ImageView为其src属性设置了@drawable/flag。当activity启动后,Android会在Resource/Drawable目录中查找名为flag.png的文件(文件后缀可以是其他图片格式,如flag.jpg),然后会加载文件并将其显示到ImageView中。当应用运行后,界面情况如下图所示:


译:奇葩史

没有评论