Xamarin.Android 应用程序基础知识2025年3月17日 | 阅读13分钟 在这里,我们将解释开发人员在开发 Android 应用程序时需要注意的一些任务或概念。 可访问性在这里,我们将讨论如何使用 Android 辅助功能 API 来构建应用程序。 UI 元素 Android 提供了一个 **ContentDescription** 属性,屏幕阅读 API 使用该属性来描述控件辅助功能的目的。 内容的描述在 AXML 布局文件中。 AXML 布局 在 XML 布局中,我们使用 **android:contentDescription** 属性 TextView 提示 对于数据输入,**EditText** 和 **TextView** 控件使用 Hint 属性来提供预期输入的描述。当输入文本时,文本本身将被“读取”而不是提示。 AXML 布局 XML 布局文件使用 android:hint 属性 LabelFor 将输入字段与标签链接起来 要将标签与数据输入控件关联,我们使用 labelFor 属性。 AXML 布局 在 XML 布局中,我们使用 android:labelFor 属性来引用另一个控件的标识符 辅助功能公告 当启用辅助功能时,我们可以在任何视图控件上使用 AnnounceForAccessibility 方法,以向用户传达事件或状态变化。AnnounceForAccessibility 并非所有操作都必需,因为内置旁白提供了足够的反馈。我们可以在额外信息对用户有帮助的情况下使用 AnnounceForAccessibility。 下面的代码显示了一个调用 AnnounceForAccessibility 的简单示例 更改焦点设置 导航取决于控件的焦点以及用户对操作可用性的理解。Android 提供了一个 Focusable 属性,可以专门标记控件在导航期间能够接收焦点。 AXML 布局 在布局 XML 文件中,设置 Android:focusable 属性 我们可以通过 nextFocusDown、nextFocusLeft、nextFocusUp 属性来控制控件的焦点顺序,这些属性在 XAML 布局中设置。我们使用这些属性来确保用户可以轻松地在屏幕上的控件之间导航。 Android 资源在这里,我们将展示 Xamarin 中 Android 资源的概念。 一个 Android 应用程序只是源代码。许多文件可以构成应用程序,例如视频、图像、字体和音频文件。非源代码文件被称为资源,在构建过程中进行编译,并打包成 APK 以分发和安装到设备中。 ![]() 资源为 Android 应用程序提供了不同的优势
当启动一个新的 Xamarin.Android 项目时,会创建一个专门的 Resources 目录,以及一些子目录。 ![]() 此屏幕截图显示应用程序资源根据其类型组织到子目录中。**Drawable** 目录包含图像;视图位于 **layout** 子目录中,等等。 这里有两种在 Xamarin.Android 应用程序中访问 **Resources** 的方式:在代码中以编程方式访问,以及在 XML 中使用 XML 语法声明式地访问。 这些资源被称为**默认资源**,并被所有设备使用,除非找到更具体的匹配项。每种资源类型都可以有备用资源,Android 可以使用这些资源来针对特定工具。 **例如,**提供的资源旨在针对用户的语言环境和屏幕尺寸。如果设备从纵向旋转 90 度到横向,那么在所有情况下,Android 都会为应用程序加载资源,而无需任何额外的编码工作。 在包含其他资源的目录的末尾,通过添加一个短字符串来指定,该字符串称为限定符。 **例如,** **resources/drawable-de** 将指定设置为德语语言环境的设备的图像,而 **resources/drawable-fr** 将保存设置为法语区域的设备的图像。提供其他资源的示例可以在下图看到,其中相同的应用程序正在运行,并更改了设备的语言环境。 ![]() 在这里,我们将讨论一些与资源相关的更多基本术语。这些是 Android 资源基础几乎所有 Android 应用程序都有一些资源。应用程序通常以 XML 文件的形式拥有用户界面布局。当我们第一次创建 Xamarin.Android 应用程序时,Xamarin.Android 项目模板会设置默认资源。 ![]() 如屏幕截图所示,这里有五个文件在资源文件夹中创建了默认资源。
创建和访问资源创建资源就像将文件添加到资源目录一样简单。当 Strings.xml 添加到文件时,Xamarin.Android 工具会自动将 Build Action 设置为 AndroidResources。 ![]() 这使得 Xamarin.Android 工具能够正确编译并将资源嵌入到 APK 文件中。如果由于任何原因,**Build Action** 未设置为 **Android Resources**,那么数据将被排除在 APK 之外。在加载或访问时,**Resources** 会导致运行时错误,并且应用程序会崩溃。 Android 资源项只支持小写文件名,而 **Xamarin**。**Android** 同时支持大写和小写。图像名称的约定是使用小写字母和下划线作为分隔符,例如 **my_image_name.png**。如果使用连字符或空格作为分隔符,则无法处理 **Resources** 的名称。 以编程方式引用资源为了以编程方式访问所有资源文件,会为数据分配一个唯一的 ResourceID。资源 ID 是在名为 Resources 的特定类中定义的整数,该类位于文件 **Resource.Designer.CS** 中。 代码看起来像这样 每个 ResourceID 都存在于嵌套类中,该嵌套类对应于资源的类型。 当 icon.png 文件添加到项目时,**Xamarin.Android** 更新了 Resource 类并创建了一个名为 Drawable 的嵌套类,其中包含常量名称 icon。Drawable 允许在代码中将文件 **icon.png** 引用为 **Resource.Drawable.Icon**。 Resource 类不应手动编辑;**Xamarin** 将覆盖 **Android** 中的所有更改。 当我们以编程方式引用资源时,它们可以通过 **Resource 类层次结构**访问。这里我们使用以下语法 **包名:**提供了所需资源的包,该资源在另一个包中使用。 **资源类型:**这是资源类中嵌套资源的类型。 **资源名称:**这是资源的文件名(不带文件类型扩展名)或 XML 元素中资源的 **Android:name** 属性的值。 **例如,**布局文件 **main.axml** 的内容是 在此示例中,我们使用了 ImageView,它需要一个可绘制资源名称 flag。ImageView 有一个 src 属性,设置为 @drawable/flag。当活动启动时,Android 将在目录 **Resource/Drawable** 中查找文件 **flag.png**(文件扩展名可以是另一种图像格式,如 **flag.jpg**),并加载文件并将其显示在 ImageView 中。当此应用程序运行时,它看起来像下图所示 ![]() 默认资源默认资源是不针对任何特定设备的项。如果找不到特定资源,则它是 Android 操作系统的默认选择。默认资源是最常见的资源。它们根据资源的类型排列在 **Resource** 目录的子目录中。 ![]() 从上图中可以看出,它显示了可绘制资源、布局和值(包含简单值的 XML 文件)的默认值。 资源类型列表如下:
备用资源备用资源是针对特定设备的资源。备用资源也定义为运行时配置,例如当前语言、屏幕尺寸和像素密度。如果 Android 可以找到与特定设备或配置匹配的资源,而不是默认资源,在这种情况下,我们将使用备用资源。如果 Android 没有找到任何其他与当前配置匹配的资源,那么我们将加载默认资源。备用资源子目录的名称是 **Resource-type-qualifier**。 限定符是标识特定设备配置的名称。一个名称可以包含多个限定符;每个限定符都用破折号分隔。 ![]() 从上面的截图可以看出,它包含了各种配置的其他资源,如语言环境、屏幕尺寸、屏幕密度和方向。 在将 **限定符** 添加到 **资源** 时,适用以下规则:
限定符列表如下:
Android 决定使用哪些资源Android 应用程序包含许多资源。在这里我们将研究 Android 在设备上运行时如何为应用程序选择资源。 Android 通过迭代测试规则来显示资源的基础
当系统查找资源但找不到它们时,它将查找其他资源并对其进行缩放。Android 无法找到默认资源。例如,当 Android 正在查找低密度资源但不可用时,Android 可能会选择高密度版本的资源而不是默认或中密度资源。它这样做是因为,高密度资源可以通过 0.5 的因子测量,这将导致比测量中密度资源(这将需要 0.75 的因子)更少的可见性问题。 **例如:**考虑一个具有以下可绘制资源目录的应用程序 然后应用程序在具有以下配置的设备上运行 法語資源與 en-GB 語言環境衝突,已排除 第一个限定符从限定符表 MCC 和 MNC 中选择。没有包含此限定符的资源目录,因此忽略 MCC/MNC 代码。 下一个限定符选择语言。一些资源与语言代码匹配。所有不与语言代码匹配的资源目录都被拒绝,资源列表现在是: 屏幕方向的下一个限定符是那些与屏幕方向 port 不匹配的资源目录被淘汰。 屏幕密度的限定符是 ldpi,这导致又一个资源目录被排除 结果,Android 将使用资源目录 drawable-en-port-ldpi 中的可绘制资源用于该设备。 下一个主题Xamarin vs Ionic |
我们请求您订阅我们的新闻通讯以获取最新更新。