📅  最后修改于: 2021-01-11 16:15:39             🧑  作者: Mango
在这里,我们将说明开发人员在开发Android应用程序时需要注意的一些任务或概念。
在这里,我们将讨论如何使用Android Accessibility API来构建应用程序。
UI元素
Android提供了ContentDescription属性,屏幕阅读API会使用该属性来描述控件可访问性的目的。
内容的描述在AXML布局文件中。
AXML布局
在XML布局中,我们使用android:contentDescription属性:
提示TextView
对于数据输入, EditText和TextView控件使用Hint属性提供所需输入的描述。输入文本后,文本本身将“读取”而不是提示。
AXML布局
XML布局文件使用android:hint属性:
LabelFor链接带有标签的输入字段
要将label与数据输入控件相关联,我们使用labelFor属性。
AXML布局
在XML布局中,我们使用android:labelFor属性引用另一个控件的标识符:
宣布辅助功能
启用辅助功能后,我们将在任何视图控件上使用AnnounceForAccessibility方法将事件或状态更改传达给用户。内置旁白提供足够反馈的所有操作都不需要AnnounceForAccessibility。我们可以使用AnnounceForAccessibility,其中的其他信息将对用户有所帮助。
下面的代码显示了一个简单的示例,调用AnnounceForAccessibility:
button.Click += delegate {
button.Text = string.Format ("{0} clicks!", count++);
button.AnnounceForAccessibility (button.Text);
};
更改焦点设置
导航取决于控件,这些控件侧重于用户对操作可用性的理解。 Android提供了Focusable属性,可以使标记控件专门在导航期间接收焦点。
AXML布局
在布局XML文件中,设置Android:focusable属性:
我们可以使用在XAML布局中设置的nextFocusDown,nextFocusLeft,nextFocusup属性关注控件的顺序。我们使用这些属性来确保用户可以轻松浏览屏幕上的控件。
在这里,我们将展示Xamarin中Android资源的概念。
Android应用程序只是源代码。许多文件可以构成应用程序,例如视频,图像,字体和音频文件。非源代码文件称为资源,并在构建过程中进行编译,并打包为APK以分发和安装到设备中:
资源为Android应用程序提供了不同的优势:
启动新的Xamarin.Android项目时,将创建一个专有目录Resources,以及一些子目录:
该屏幕快照显示了应用程序资源根据其类型排列在子目录中。可绘制目录具有图像;视图进入布局子目录,等等。
这是在Xamarin中访问资源的两种方法。 Android应用程序:使用XML语法以编程方式以代码形式并以XML声明方式。
这些资源称为默认资源,除非找到更具体的匹配项,否则所有设备都将使用它们。每种类型的资源都可以具有Android可以用来定位特定工具的备用资源。
例如,提供了以用户的语言环境和屏幕大小为目标的资源。如果设备从纵向旋转到横向旋转90度,则在所有情况下,Android都会为应用程序加载资源,而无需进行任何额外的编码工作。
在目录的末尾,通过添加短字符串来指定包含其他资源的目录,这称为限定符。
例如, resource / drawable-de将为设置为德语语言环境的设备指定图像,而resource / drawable-fr将为设置为法语区域的设备指定图像。下图显示了提供其他资源的示例,该图通过更改设备的区域设置来运行同一应用程序:
在这里,我们将讨论与资源有关的更多基本术语。这些是:
几乎所有的Android应用程序都有一些参考资料。应用程序通常具有XML文件形式的用户界面布局。当我们首先创建Xamarin.Android应用程序时,Xamarin.Android项目模板会设置默认资源。
如屏幕快照所示,这是在资源文件夹中创建默认资源的五个文件:
创建资源就像将文件添加到资源目录一样简单。将Strings.xml添加到文件后,Xamarin.Android工具会自动将Build Action设置为AndroidResources:
这允许Xamarin。 Android工具可以正确编译并将资源嵌入APK文件。如果出于任何原因,“构建操作”未设置为Android Resources ,则数据将从APK中排除。在加载或访问时,资源会给出运行时错误,并且应用程序崩溃。
Xamarin时, Android仅支持资源项的小写文件名。 Android支持大写和小写。图像名称的约定是使用带下划线的小写字母作为分隔符,例如my_image_name.png 。如果将破折号或空格用作分隔符,则无法处理资源的名称。
要以编程方式访问所有资源文件,必须为数据分配唯一资源ID。资源ID是在称为资源的特定类中定义的整数,该类可在文件Resource.Designer.CS中找到。
代码看起来像这样:
public partial class Resource
{
public partial class Attribute
{
}
public partial class Drawable {
public constint 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;
}
每个ResourceID都在嵌套类内找到,它对应于Resources的类型。
将icon.png文件添加到项目后, Xamarin.Android更新了Resource类,并创建了一个名为Drawable的嵌套类,并带有一个常量名称图标。 Drawable允许在代码中将文件icon.png称为Resource.Drawable.Icon 。
资源类别不应手动编辑; Xamarin将覆盖Android中的所有更改。
当我们以编程方式引用资源时,可以通过“资源类”层次结构访问它们。在这里,我们使用以下语法:
[.]Resource..
PackageName:软件包,它提供了Resource,该资源要求使用该资源的另一个软件包中的资源。
资源类型:这是资源类中嵌套资源的类型。
资源名称:这是XML元素中资源的文件名(不带文件扩展名)或Android:name属性的值。
例如,布局文件main的内容。 axml是:
在此示例中,我们使用了ImageView,它需要可绘制资源名称标志。 ImageView具有一个src属性,该属性设置为@ drawable / flag。当活动开始时,Android将在Resource / Drawable目录中查找文件flag.png (文件扩展名可以是另一种图像格式,例如flag.jpg ),然后加载该文件并将其显示在ImageView中。当该应用程序运行时,它将类似于下图:
默认资源是不是特定于任何特定设备的项目。如果未找到特定资源,则它是Android OS的默认选择。默认资源是最常见的资源。根据资源的类型,它们被安排在Resource目录的子目录中。
在上图中,它显示了可绘制资源,布局和值的默认值(XML文件,其中包含简单值)。
资源类型的列表是:
备用资源是针对特定设备的那些资源。备用资源也定义为运行时配置,例如当前语言,屏幕大小和像素密度。如果android可以比默认资源匹配特定于特定设备或配置的资源,在这种情况下,我们将使用备用资源。如果Android找不到与当前配置匹配的其他资源,则我们将加载默认资源。备用资源子目录的名称为Resource-type-qualifier 。
限定词是标识特定设备配置的名称。一个名称可以包含多个限定符。破折号将它们分开。
从上面的屏幕截图中可以看出,它包含用于各种配置的其他资源,例如区域设置,屏幕大小,屏幕密度和方向。
在将限定词添加到资源中时,将应用以下规则:
资格赛名单如下:
android应用程序包含许多资源。在这里,我们将研究Android在设备上运行时如何为应用选择资源。
Android通过遍历Test的规则来显示参考资料的基础:
当系统正在寻找资源而找不到资源时,它将找到其他资源并对其进行扩展。 Android无法找到默认资源。例如,当Android正在寻找低密度资源且该资源不可用时,Android可能会在默认资源或中等密度资源上选择高密度资源的版本。这样做的原因是,高密度资源的测量因子为0.5,与中等密度资源的测量因子为0.75相比,这将导致一些可见性问题。
例如:考虑一个具有以下可绘制资源目录的应用程序:
drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key
然后,应用程序将在具有以下配置的设备上运行:
• Locale - en-GB
• Orientation - port
• Screen density - hdpi
• Touchscreen type - notouch
• Primary input method - 12key
消除了法国资源与en-GB语言环境的冲突:
drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key
从限定符表MCC和MNC中选择第一个限定符。没有包含该限定符的资源目录,因此MCC / MNC代码将被忽略。
下一个限定词选择语言。一些资源与语言代码匹配。拒绝所有与语言代码不匹配的资源目录,现在列出资源列表:
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
屏幕方向的下一个限定符是消除了与屏幕方向端口不匹配的资源目录:
drawable-en-port
drawable-en-port-ldpi
屏幕密度的限定符为ldpi,从而排除了另一个资源目录:
drawable-en-port-ldpi
结果,Android将使用设备资源目录drawable-en-port-ldpi中的drawable资源。