Właściwości automatyzacji w programie Xamarin.Forms
Xamarin.Forms umożliwia ustawianie wartości ułatwień dostępu dla elementów interfejsu użytkownika przy użyciu dołączonych właściwości z klasy AutomationProperties, która z kolei ustawia natywne wartości ułatwień dostępu. W tym artykule wyjaśniono, jak używać klasy AutomationProperties, aby czytnik zawartości ekranu mógł mówić o elementach na stronie.
Xamarin.Forms umożliwia ustawianie właściwości automatyzacji na elementach interfejsu użytkownika za pośrednictwem następujących dołączonych właściwości:
AutomationProperties.IsInAccessibleTree
— wskazuje, czy element jest dostępny dla dostępnej aplikacji. Aby uzyskać więcej informacji, zobacz AutomationProperties.IsInAccessibleTree.AutomationProperties.Name
— krótki opis elementu, który służy jako czytelny identyfikator elementu. Aby uzyskać więcej informacji, zobacz AutomationProperties.Name.AutomationProperties.HelpText
— dłuższy opis elementu, który można traktować jako tekst etykietki narzędzia skojarzony z elementem. Aby uzyskać więcej informacji, zobacz AutomationProperties.HelpText.AutomationProperties.LabeledBy
— umożliwia innemu elementowi definiowanie informacji o ułatwieniach dostępu dla bieżącego elementu. Aby uzyskać więcej informacji, zobacz AutomationProperties.LabeledBy.
Te dołączone właściwości ustawiają natywne wartości ułatwień dostępu, aby czytnik zawartości ekranu mógł mówić o elemecie . Aby uzyskać więcej informacji na temat dołączonych właściwości, zobacz Dołączone właściwości.
Ważne
Użycie dołączonych właściwości może mieć wpływ na wykonywanie testów interfejsu AutomationProperties
użytkownika w systemie Android. Właściwości AutomationId
, AutomationProperties.Name
i AutomationProperties.HelpText
będą ustawiać właściwość natywną ContentDescription
, a AutomationProperties.Name
wartości właściwości i AutomationProperties.HelpText
mają pierwszeństwo przed AutomationId
wartością (jeśli obie AutomationProperties.Name
wartości i AutomationProperties.HelpText
są ustawione, wartości zostaną łączone). Oznacza to, że wszystkie testy, których szukasz AutomationId
, zakończy się niepowodzeniem, jeśli AutomationProperties.Name
element lub AutomationProperties.HelpText
zostaną również ustawione. W tym scenariuszu należy zmienić testy interfejsu użytkownika, aby wyszukać wartość AutomationProperties.Name
lub AutomationProperties.HelpText
lub połączenie obu tych elementów.
Każda platforma ma inny czytnik zawartości ekranu do narracji wartości ułatwień dostępu:
- System iOS ma usługę VoiceOver. Aby uzyskać więcej informacji, zobacz Testowanie ułatwień dostępu na urządzeniu przy użyciu funkcji VoiceOver w developer.apple.com.
- Android ma TalkBack. Aby uzyskać więcej informacji, zobacz Testowanie ułatwień dostępu aplikacji w developer.android.com.
- System Windows ma Narratora. Aby uzyskać więcej informacji, zobacz Weryfikowanie głównych scenariuszy aplikacji przy użyciu Narratora.
Jednak dokładne zachowanie czytnika zawartości ekranu zależy od oprogramowania i jego konfiguracji. Na przykład większość czytników zawartości ekranu odczytuje tekst skojarzony z kontrolką po odebraniu fokusu, umożliwiając użytkownikom orientację w miarę przechodzenia między kontrolkami na stronie. Niektórzy czytniki zawartości ekranu odczytują również cały interfejs użytkownika aplikacji po wyświetleniu strony, co umożliwia użytkownikowi odbieranie całej dostępnej zawartości informacyjnej strony przed podjęciem próby nawigowania po niej.
Czytniki zawartości ekranu odczytują również różne wartości ułatwień dostępu. W przykładowej aplikacji:
- Funkcja VoiceOver odczytuje
Placeholder
wartośćEntry
elementu , a następnie instrukcje dotyczące używania kontrolki. - Funkcja TalkBack odczytuje
Placeholder
wartośćEntry
elementu , a następnieAutomationProperties.HelpText
wartość, a następnie instrukcje dotyczące używania kontrolki. - Narrator odczyta
AutomationProperties.LabeledBy
wartośćEntry
elementu , a następnie instrukcje dotyczące używania kontrolki.
Ponadto Narrator określi AutomationProperties.Name
priorytet , , AutomationProperties.LabeledBy
a następnie AutomationProperties.HelpText
. W systemie Android talkback może łączyć AutomationProperties.Name
wartości i AutomationProperties.HelpText
. W związku z tym zaleca się przeprowadzenie dokładnego testowania ułatwień dostępu na każdej platformie w celu zapewnienia optymalnego środowiska.
AutomationProperties.IsInAccessibleTree
Dołączona AutomationProperties.IsInAccessibleTree
właściwość to boolean
element, który określa, czy element jest dostępny, a tym samym widoczny dla czytników zawartości ekranu. Musi być ustawiona tak, aby true
korzystała z innych dołączonych właściwości ułatwień dostępu. Można to zrobić w języku XAML w następujący sposób:
<Entry AutomationProperties.IsInAccessibleTree="true" />
Alternatywnie można go ustawić w języku C# w następujący sposób:
var entry = new Entry();
AutomationProperties.SetIsInAccessibleTree(entry, true);
Uwaga
Należy pamiętać, że metodę SetValue
można również użyć do ustawienia dołączonej AutomationProperties.IsInAccessibleTree
właściwości — entry.SetValue(AutomationProperties.IsInAccessibleTreeProperty, true);
AutomationProperties.Name
Dołączona AutomationProperties.Name
wartość właściwości powinna być krótkim, opisowym ciągiem tekstowym używanym przez czytnik zawartości ekranu do ogłaszania elementu. Ta właściwość powinna być ustawiona dla elementów, które mają znaczenie ważne dla zrozumienia zawartości lub interakcji z interfejsem użytkownika. Można to zrobić w języku XAML w następujący sposób:
<ActivityIndicator AutomationProperties.IsInAccessibleTree="true"
AutomationProperties.Name="Progress indicator" />
Alternatywnie można go ustawić w języku C# w następujący sposób:
var activityIndicator = new ActivityIndicator();
AutomationProperties.SetIsInAccessibleTree(activityIndicator, true);
AutomationProperties.SetName(activityIndicator, "Progress indicator");
Uwaga
Należy pamiętać, że metodę SetValue
można również użyć do ustawienia dołączonej AutomationProperties.Name
właściwości — activityIndicator.SetValue(AutomationProperties.NameProperty, "Progress indicator");
AutomationProperties.HelpText
Dołączona właściwość powinna być ustawiona AutomationProperties.HelpText
na tekst opisujący element interfejsu użytkownika i może być uważana za tekst etykietki narzędzia skojarzony z elementem. Można to zrobić w języku XAML w następujący sposób:
<Button Text="Toggle ActivityIndicator"
AutomationProperties.IsInAccessibleTree="true"
AutomationProperties.HelpText="Tap to toggle the activity indicator" />
Alternatywnie można go ustawić w języku C# w następujący sposób:
var button = new Button { Text = "Toggle ActivityIndicator" };
AutomationProperties.SetIsInAccessibleTree(button, true);
AutomationProperties.SetHelpText(button, "Tap to toggle the activity indicator");
Uwaga
Należy pamiętać, że metodę SetValue
można również użyć do ustawienia dołączonej AutomationProperties.HelpText
właściwości — button.SetValue(AutomationProperties.HelpTextProperty, "Tap to toggle the activity indicator");
Na niektórych platformach w przypadku kontrolek edycji, takich jak Entry
, HelpText
właściwość może czasami zostać pominięta i zastąpiona tekstem zastępczym. Na przykład "Wprowadź swoją nazwę tutaj" jest dobrym kandydatem do Entry.Placeholder
właściwości, która umieszcza tekst w kontrolce przed rzeczywistymi danymi wejściowymi użytkownika.
AutomationProperties.LabeledBy
Dołączona AutomationProperties.LabeledBy
właściwość umożliwia innemu elementowi definiowanie informacji o ułatwieniach dostępu dla bieżącego elementu. Na przykład Label
obok elementu Entry
można użyć elementu , aby opisać, co Entry
reprezentuje. Można to zrobić w języku XAML w następujący sposób:
<Label x:Name="label" Text="Enter your name: " />
<Entry AutomationProperties.IsInAccessibleTree="true"
AutomationProperties.LabeledBy="{x:Reference label}" />
Alternatywnie można go ustawić w języku C# w następujący sposób:
var nameLabel = new Label { Text = "Enter your name: " };
var entry = new Entry();
AutomationProperties.SetIsInAccessibleTree(entry, true);
AutomationProperties.SetLabeledBy(entry, nameLabel);
Ważne
Element AutomationProperties.LabeledByProperty
nie jest jeszcze obsługiwany w systemie iOS.
Uwaga
Należy pamiętać, że metodę SetValue
można również użyć do ustawienia dołączonej AutomationProperties.IsInAccessibleTree
właściwości — entry.SetValue(AutomationProperties.LabeledByProperty, nameLabel);
Zawiłości ułatwień dostępu
W poniższych sekcjach opisano zawiłości ustawiania wartości ułatwień dostępu dla niektórych kontrolek.
Strona nawigacji
W systemie Android, aby ustawić tekst odczytywany przez czytniki zawartości ekranu dla strzałki wstecz na pasku akcji w NavigationPage
obiekcie , ustaw AutomationProperties.Name
właściwości i AutomationProperties.HelpText
na Page
. Należy jednak pamiętać, że nie będzie to miało wpływu na przyciski wstecz systemu operacyjnego.
FlyoutPage
W systemach iOS i platforma uniwersalna systemu Windows (UWP), aby ustawić tekst odczytywany przez czytniki zawartości ekranu dla przycisku przełącznika na FlyoutPage
obiekcie , ustaw AutomationProperties.Name
właściwości i AutomationProperties.HelpText
w FlyoutPage
obiekcie lub we IconImageSource
właściwości Flyout
strony.
W systemie Android, aby ustawić tekst odczytywany przez czytniki zawartości ekranu dla przycisku przełącznika w obiekcie FlyoutPage
, dodaj zasoby ciągów do projektu systemu 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>
Następnie ustaw AutomationId
właściwość właściwości IconImageSource
Flyout
strony na odpowiedni ciąg:
var flyout = new ContentPage { ... };
flyout.IconImageSource.AutomationId = "btnMDPAutomationID";
ToolbarItem
W systemach iOS, Android i UWP czytniki zawartości ekranu będą odczytywać Text
wartość ToolbarItem
właściwości wystąpień, pod warunkiem, że AutomationProperties.Name
wartości lub AutomationProperties.HelpText
nie są zdefiniowane.
W systemach iOS i UWP AutomationProperties.Name
wartość właściwości zastąpi Text
wartość właściwości odczytywaną przez czytnik zawartości ekranu.
W systemie Android AutomationProperties.Name
wartości właściwości i/lub AutomationProperties.HelpText
całkowicie zastąpią Text
wartość właściwości widoczną i odczytaną przez czytnik zawartości ekranu. Należy pamiętać, że jest to ograniczenie interfejsów API mniejsze niż 26.