Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
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.