Lokalizacja od prawej do lewej
Lokalizacja od prawej do lewej dodaje obsługę kierunku przepływu od prawej do lewej do Xamarin.Forms aplikacji.
Uwaga
Lokalizacja od prawej do lewej wymaga użycia systemu iOS 9 lub nowszego oraz interfejsu API 17 lub nowszego w systemie Android.
Kierunek przepływu to kierunek, w którym elementy interfejsu użytkownika na stronie są skanowane przez oko. Niektóre języki, takie jak arabski i hebrajski, wymagają, aby elementy interfejsu użytkownika zostały określone w kierunku przepływu od prawej do lewej. Można to osiągnąć, ustawiając VisualElement.FlowDirection
właściwość . Ta właściwość pobiera lub ustawia kierunek przepływu elementów interfejsu użytkownika w ramach dowolnego elementu nadrzędnego, który kontroluje ich układ, i powinien być ustawiony na jedną z FlowDirection
wartości wyliczenia:
FlowDirection
Ustawienie właściwości na RightToLeft
na element zwykle ustawia wyrównanie z prawej strony, kolejność odczytu do prawej do lewej i układ kontrolki, aby przepływać od prawej do lewej:
Napiwek
Właściwość należy ustawić FlowDirection
tylko w układzie początkowym. Zmiana tej wartości w czasie wykonywania powoduje kosztowny proces układu, który wpłynie na wydajność.
Domyślna wartość właściwości elementu bez elementu nadrzędnego to , a wartością domyślną FlowDirection
FlowDirection
elementu z elementem nadrzędnym jest MatchParent
.LeftToRight
W związku z tym element dziedziczy FlowDirection
wartość właściwości z elementu nadrzędnego w drzewie wizualizacji, a dowolny element może zastąpić wartość pobieraną z elementu nadrzędnego.
Napiwek
Podczas lokalizowania aplikacji dla języków od prawej do lewej ustaw FlowDirection
właściwość na stronie lub w układzie głównym. Powoduje to, że wszystkie elementy zawarte na stronie lub w układzie głównym odpowiednio reagują na kierunek przepływu.
Przestrzeganie kierunku przepływu urządzenia
Przestrzeganie kierunku przepływu urządzenia na podstawie wybranego języka i regionu jest wyraźnym wyborem dla deweloperów i nie odbywa się automatycznie. Można to osiągnąć, ustawiając FlowDirection
właściwość na stronie lub w układzie głównym na static
Device.FlowDirection
wartość:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
this.FlowDirection = Device.FlowDirection;
Wszystkie elementy podrzędne strony lub układu głównego domyślnie dziedziczą Device.FlowDirection
wartość.
Konfiguracja platformy
Aby włączyć ustawienia regionalne od prawej do lewej, wymagana jest określona konfiguracja platformy.
iOS
Wymagane ustawienia regionalne od prawej do lewej należy dodać jako obsługiwany język do elementów tablicy dla CFBundleLocalizations
klucza w pliku Info.plist. W poniższym przykładzie pokazano, że język arabski został dodany do tablicy CFBundleLocalizations
klucza:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ar</string>
</array>
Aby uzyskać więcej informacji, zobacz Localization Basics in iOS (Podstawy lokalizacji w systemie iOS).
Następnie można przetestować lokalizację od prawej do lewej, zmieniając język i region na urządzeniu/symulatorze na ustawienia regionalne od prawej do lewej określone w pliku Info.plist.
Ostrzeżenie
Pamiętaj, że w przypadku zmiany języka i regionu na ustawienia regionalne od prawej do lewej w systemie iOS wszystkie DatePicker
widoki będą zgłaszać wyjątek, jeśli nie uwzględnisz zasobów wymaganych dla ustawień regionalnych. Na przykład podczas testowania aplikacji w języku arabskim, która ma wartość DatePicker
, upewnij się, że w sekcji Internationalization (Internationalization) okienka Kompilacja systemu iOS jest zaznaczona wartość mideast.
Android
Plik AndroidManifest.xml aplikacji powinien zostać zaktualizowany tak, aby <uses-sdk>
węzeł ustawiał android:minSdkVersion
atrybut na 17, a <application>
węzeł ustawia android:supportsRtl
atrybut na true
wartość :
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<uses-sdk android:minSdkVersion="17" ... />
<application ... android:supportsRtl="true">
</application>
</manifest>
Następnie można przetestować lokalizację od prawej do lewej przez zmianę urządzenia/emulatora w celu używania języka od prawej do lewej lub przez włączenie kierunku wymuszenia układu RTL w obszarze Ustawienia > Opcje dewelopera.
Platforma uniwersalna systemu Windows (UWP)
Wymagane zasoby językowe należy określić w węźle <Resources>
pliku Package.appxmanifest . W poniższym przykładzie pokazano, że język arabski został dodany do węzła <Resources>
:
<Resources>
<Resource Language="x-generate"/>
<Resource Language="en" />
<Resource Language="ar" />
</Resources>
Ponadto platforma UWP wymaga, aby domyślna kultura aplikacji została jawnie zdefiniowana w bibliotece .NET Standard. Można to zrobić, ustawiając NeutralResourcesLanguage
atrybut w AssemblyInfo.cs
klasie lub w innej klasie na kulturę domyślną:
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
Następnie można przetestować lokalizację od prawej do lewej, zmieniając język i region na urządzeniu na odpowiednie ustawienia regionalne od prawej do lewej.
Ograniczenia
Xamarin.Forms Lokalizacja od prawej do lewej ma obecnie wiele ograniczeń:
NavigationPage
lokalizacja przycisku, lokalizacja elementu paska narzędzi i animacja przejścia jest kontrolowana przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość.CarouselPage
kierunek przesunięcia nie przerzuca.Image
zawartość wizualna nie jest przerzucana.WebView
zawartość nie uwzględniaFlowDirection
właściwości.- Aby
TextDirection
kontrolować wyrównanie tekstu, należy dodać właściwość .
iOS
Stepper
orientacja jest kontrolowana przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość .EntryCell
wyrównanie tekstu jest kontrolowane przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość .ContextActions
gesty i wyrównanie nie są odwrócone.
Android
SearchBar
orientacja jest kontrolowana przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość .ContextActions
umieszczanie jest kontrolowane przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość .
Platforma UWP
Editor
wyrównanie tekstu jest kontrolowane przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość .FlowDirection
właściwość nie jest dziedziczona przezFlyoutPage
elementy podrzędne.ContextActions
wyrównanie tekstu jest kontrolowane przez ustawienia regionalne urządzenia, a nieFlowDirection
właściwość .
Wymuś układ od prawej do lewej
Aplikacje Xamarin.iOS i Xamarin.Android mogą być wymuszane, aby zawsze używać układu od prawej do lewej, niezależnie od ustawień urządzenia, modyfikując odpowiednie projekty platformy.
iOS
Aplikacje platformy Xamarin.iOS mogą być wymuszane, aby zawsze używać układu od prawej do lewej, modyfikując klasę AppDelegate w następujący sposób:
Zadeklaruj
IntPtr_objc_msgSend
funkcję jako pierwszy wiersz wAppDelegate
klasie:[System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")] internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
Wywołaj
IntPtr_objc_msgSend
funkcję zFinishedLaunching
metody przed zwróceniemFinshedLaunching
z metody :bool result = base.FinishedLaunching(app, options); ObjCRuntime.Selector selector = new ObjCRuntime.Selector("setSemanticContentAttribute:"); IntPtr_objc_msgSend(UIView.Appearance.Handle, selector.Handle, UISemanticContentAttribute.ForceRightToLeft); return result;
Takie podejście jest przydatne w przypadku aplikacji, które zawsze wymagają układu od prawej do lewej i usuwa wymóg ustawienia FlowDirection
właściwości.
Aby uzyskać więcej informacji na temat IntrPtr_objc_msgSend
metody, zobacz Selektory objective-C w środowisku Xamarin.iOS.
Android
Aplikacje platformy Xamarin.Android mogą być wymuszane, aby zawsze używać układu od prawej do lewej, modyfikując klasę MainActivity w celu uwzględnienia następującego wiersza:
Window.DecorView.LayoutDirection = LayoutDirection.Rtl;
Uwaga
Takie podejście wymaga, aby aplikacja obsługiwała układ od prawej do lewej. Aby uzyskać więcej informacji, zobacz Konfiguracja platformy systemu Android.
Takie podejście jest przydatne w przypadku aplikacji, które zawsze wymagają układu od prawej do lewej i usuwa wymóg ustawiania FlowDirection
właściwości dla większości kontrolek. Jednak niektóre kontrolki, takie jak CollectionView
, nie szanują LayoutDirection
właściwości i nadal wymagają FlowDirection
ustawienia właściwości.
Prawa do lewej obsługi języka za pomocą platformy Xamarin.University
Xamarin.Forms 3.0 Wideo pomocy technicznej od prawej do lewej