Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Xamarin.Forms позволяет задавать значения специальных возможностей в элементах пользовательского интерфейса с помощью присоединенных свойств из класса AutomationProperties, которые, в свою очередь, задают собственные значения специальных возможностей. Эта статья поясняет, как использовать класс AutomationProperties, чтобы средство чтения с экрана могло озвучивать элементы на странице.
Xamarin.Forms позволяет задавать свойства автоматизации в элементах пользовательского интерфейса с помощью следующих присоединенных свойств:
AutomationProperties.IsInAccessibleTree— указывает, доступен ли элемент приложению специальных возможностей. Дополнительные сведения см. в разделе AutomationProperties.IsInAccessibleTree.AutomationProperties.Name— краткое описание элемента, выступающего в качестве произносимого идентификатора для элемента. Дополнительные сведения см. в разделе AutomationProperties.Name.AutomationProperties.HelpText— более подробное описание элемента, которое можно рассматривать как текст подсказки, связанный с элементом. Дополнительные сведения см. в разделе AutomationProperties.HelpText.AutomationProperties.LabeledBy— позволяет другому элементу определить сведения о специальных возможностях для текущего элемента. Дополнительные сведения см. в разделе AutomationProperties.LabeledBy.
Эти присоединенные свойства задают собственные значения специальных возможностей таким образом, чтобы средство чтения с экрана могло озвучить сведения об элементе. Дополнительные сведения о присоединенных свойствах см. в разделе Присоединенные свойства.
Внимание
Использование присоединенных свойств AutomationProperties может влиять на выполнение тестов пользовательского интерфейса в Android. Свойства AutomationId, AutomationProperties.Name и AutomationProperties.HelpText задают собственное свойство ContentDescription, при этом значения свойств AutomationProperties.Name и AutomationProperties.HelpText имеют приоритет над значением AutomationId (если задано как AutomationProperties.Name, так и AutomationProperties.HelpText, эти значения будут сцеплены). Это означает, что все тесты, ищущие AutomationId, завершатся ошибкой, если для элемента также задано AutomationProperties.Name или AutomationProperties.HelpText. В этом случае тесты пользовательского интерфейса следует изменить для поиска значения AutomationProperties.Name или AutomationProperties.HelpText либо объединения этих значений.
Каждая платформа имеет отдельное средство чтения с экрана для озвучивания значений специальных возможностей:
- В iOS есть VoiceOver. Дополнительные сведения см. в статье Тестирование специальных возможностей на устройстве с использованием VoiceOver на сайте developer.apple.com.
- В Android есть TalkBack. Дополнительные сведения см. в статье Тестирование специальных возможностей приложения на сайте developer.android.com.
- В Windows есть экранный диктор. Дополнительные сведения см. в статье Проверка основных сценариев приложения с использованием экранного диктора.
Однако точное поведение средства чтения с экрана зависит от программного обеспечения и его настройки пользователем. Например, большинство средств чтения с экрана зачитывают текст с элемента управления, когда на него переключается фокус, что позволяет пользователям ориентироваться при переходе между элементами управления на странице. Некоторые средства чтения с экрана также считывают весь пользовательский интерфейс приложения при отображении страницы, что позволяет пользователю получить все доступные на странице сведения, прежде чем пытаться перемещаться по ней.
Кроме того, средства чтения с экрана зачитывают разные значения специальных возможностей. В рассматриваемом примере приложения:
- VoiceOver зачитает значение
PlaceholderобъектаEntry, а затем инструкцию по использованию этого элемента управления; - TalkBack зачитает значение
PlaceholderобъектаEntry, затем значениеAutomationProperties.HelpText, а затем инструкцию по использованию этого элемента управления; - экранный диктор зачитает значение
AutomationProperties.LabeledByобъектаEntry, а затем инструкцию по использованию этого элемента управления.
Кроме того, экранный диктор расставит приоритеты следующим образом: AutomationProperties.Name, AutomationProperties.LabeledBy и затем AutomationProperties.HelpText. TalkBack в Android может сочетать значения AutomationProperties.Name и AutomationProperties.HelpText. Поэтому для обеспечения оптимальной работы рекомендуется тщательно протестировать специальные возможности для каждой платформы.
AutomationProperties.IsInAccessibleTree
Присоединенное свойство AutomationProperties.IsInAccessibleTree является boolean, определяющим, доступен ли элемент (и, соответственно, видят ли его средства чтения с экрана). Чтобы использовать другие присоединенные свойства специальных возможностей, для него нужно задать значение true. Это можно сделать в XAML следующим образом:
<Entry AutomationProperties.IsInAccessibleTree="true" />
Кроме того, его можно задать в C# следующим образом:
var entry = new Entry();
AutomationProperties.SetIsInAccessibleTree(entry, true);
Примечание.
Обратите внимание, что метод SetValue также можно использовать для задания присоединенного свойства AutomationProperties.IsInAccessibleTree — entry.SetValue(AutomationProperties.IsInAccessibleTreeProperty, true);
AutomationProperties.Name
Значением присоединенного свойства AutomationProperties.Name должна быть короткая описательная текстовая строка, которую средство чтения с экрана использует для объявления элемента. Это свойство должно быть задано для элементов, значение которых важно для понимания содержимого или взаимодействия с пользовательским интерфейсом. Это можно сделать в XAML следующим образом:
<ActivityIndicator AutomationProperties.IsInAccessibleTree="true"
AutomationProperties.Name="Progress indicator" />
Кроме того, его можно задать в C# следующим образом:
var activityIndicator = new ActivityIndicator();
AutomationProperties.SetIsInAccessibleTree(activityIndicator, true);
AutomationProperties.SetName(activityIndicator, "Progress indicator");
Примечание.
Обратите внимание, что метод SetValue также можно использовать для задания присоединенного свойства AutomationProperties.Name — activityIndicator.SetValue(AutomationProperties.NameProperty, "Progress indicator");
AutomationProperties.HelpText
Для присоединенного свойства AutomationProperties.HelpText нужно задать текст, который описывает данный элемент пользовательского интерфейса и может рассматриваться как текст подсказки, связанный с элементом. Это можно сделать в XAML следующим образом:
<Button Text="Toggle ActivityIndicator"
AutomationProperties.IsInAccessibleTree="true"
AutomationProperties.HelpText="Tap to toggle the activity indicator" />
Кроме того, его можно задать в C# следующим образом:
var button = new Button { Text = "Toggle ActivityIndicator" };
AutomationProperties.SetIsInAccessibleTree(button, true);
AutomationProperties.SetHelpText(button, "Tap to toggle the activity indicator");
Примечание.
Обратите внимание, что метод SetValue также можно использовать для задания присоединенного свойства AutomationProperties.HelpText — button.SetValue(AutomationProperties.HelpTextProperty, "Tap to toggle the activity indicator");
На некоторых платформах для редактирования элементов управления, таких как Entry, свойство HelpText иногда можно опустить и заменить текстом заполнителя. Например, элемент "Введите здесь свое имя" является хорошим кандидатом для использования в свойстве Entry.Placeholder, которое помещает текст в элемент управления до фактического ввода данных пользователем.
AutomationProperties.LabeledBy
Присоединенное свойство AutomationProperties.LabeledBy позволяет другому элементу определить сведения о специальных возможностях для текущего элемента. Например, расположение Label рядом с Entry можно использовать для описания того, что представляет Entry. Это можно сделать в XAML следующим образом:
<Label x:Name="label" Text="Enter your name: " />
<Entry AutomationProperties.IsInAccessibleTree="true"
AutomationProperties.LabeledBy="{x:Reference label}" />
Кроме того, его можно задать в C# следующим образом:
var nameLabel = new Label { Text = "Enter your name: " };
var entry = new Entry();
AutomationProperties.SetIsInAccessibleTree(entry, true);
AutomationProperties.SetLabeledBy(entry, nameLabel);
Внимание
AutomationProperties.LabeledByProperty пока не поддерживается в iOS.
Примечание.
Обратите внимание, что метод SetValue также можно использовать для задания присоединенного свойства AutomationProperties.IsInAccessibleTree — entry.SetValue(AutomationProperties.LabeledByProperty, nameLabel);
Особенности специальных возможностей
Следующие разделы описывают особенности настройки специальных возможностей у определенных элементов управления.
NavigationPage
На Android, чтобы задать текст средства чтения с экрана, который будет произноситься для стрелки "назад" в панели действий NavigationPage, используйте свойства AutomationProperties.Name и AutomationProperties.HelpText класса Page. Однако учтите, что это не относится к кнопкам "назад" в операционной системе.
FlyoutPage
На iOS и универсальной платформе Windows (UWP), чтобы задать текст средства чтения с экрана, который будет произноситься для выключателя в FlyoutPage, используйте либо свойства AutomationProperties.Name и AutomationProperties.HelpText класса FlyoutPage, либо свойство IconImageSource страницы Flyout.
На Android, чтобы задать текст средства чтения с экрана, который будет произноситься для выключателя в FlyoutPage, добавьте в проект Android следующие строковые ресурсы:
<resources>
<string name="app_name">Xamarin Forms Control Gallery</string>
<string name="btnMDPAutomationID_open">Open Side Menu message</string>
<string name="btnMDPAutomationID_close">Close Side Menu message</string>
</resources>
Затем назначьте нужную строку свойству AutomationId в свойстве IconImageSource страницы Flyout:
var flyout = new ContentPage { ... };
flyout.IconImageSource.AutomationId = "btnMDPAutomationID";
ToolbarItem
На iOS, Android и UWP средства чтения с экрана будут произносить значение свойства Text экземпляров ToolbarItem при условии, что не заданы значения AutomationProperties.Name или AutomationProperties.HelpText.
На iOS и UWP значение свойства AutomationProperties.Name заменит значение Text, произносимое средством чтения с экрана.
На Android значения свойств AutomationProperties.Name и AutomationProperties.HelpText полностью заменят значение Text, являющееся отображаемым и одновременно произносимым средством чтения с экрана. Это является ограничением API-интерфейсов вплоть до уровня 26.