Pelokalan kanan-ke-kiri
Pelokalan kanan-ke-kiri menambahkan dukungan untuk arah alur kanan-ke-kiri ke Xamarin.Forms aplikasi.
Catatan
Pelokalan kanan-ke-kiri memerlukan penggunaan iOS 9 atau lebih tinggi, dan API 17 atau yang lebih tinggi di Android.
Arah alur adalah arah di mana elemen UI pada halaman dipindai oleh mata. Beberapa bahasa, seperti Arab dan Ibrani, mengharuskan elemen UI ditata dalam arah aliran kanan-ke-kiri. Ini dapat dicapai dengan mengatur VisualElement.FlowDirection
properti. Properti ini mendapatkan atau mengatur arah di mana elemen UI mengalir dalam elemen induk apa pun yang mengontrol tata letaknya, dan harus diatur ke salah FlowDirection
satu nilai enumerasi:
FlowDirection
Mengatur properti ke RightToLeft
pada elemen umumnya mengatur perataan ke kanan, urutan baca ke kanan-ke-kiri, dan tata letak kontrol untuk mengalir dari kanan-ke-kiri:
Tip
Anda seharusnya hanya mengatur FlowDirection
properti pada tata letak awal. Mengubah nilai ini saat runtime menyebabkan proses tata letak mahal yang akan memengaruhi performa.
Nilai properti default FlowDirection
untuk elemen tanpa induk adalah LeftToRight
, sedangkan default FlowDirection
untuk elemen dengan induk adalah MatchParent
. Oleh karena itu, elemen mewarisi FlowDirection
nilai properti dari induknya di pohon visual, dan elemen apa pun dapat mengambil alih nilai yang diperoleh dari induknya.
Tip
Saat melokalisasi aplikasi untuk bahasa kanan-ke-kiri, atur FlowDirection
properti pada halaman atau tata letak akar. Ini menyebabkan semua elemen yang terkandung dalam halaman, atau tata letak akar, merespons dengan tepat ke arah alur.
Menghormati arah aliran perangkat
Menghormati arah alur perangkat berdasarkan bahasa dan wilayah yang dipilih adalah pilihan pengembang eksplisit dan tidak terjadi secara otomatis. Ini dapat dicapai dengan mengatur FlowDirection
properti pada halaman, atau tata letak akar, ke static
Device.FlowDirection
nilai:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
this.FlowDirection = Device.FlowDirection;
Semua elemen turunan halaman, atau tata letak akar, secara default akan mewarisi Device.FlowDirection
nilai.
Penyetelan platform
Penyiapan platform tertentu diperlukan untuk mengaktifkan lokal kanan-ke-kiri.
iOS
Lokal kanan-ke-kiri yang diperlukan harus ditambahkan sebagai bahasa yang didukung ke item array untuk CFBundleLocalizations
kunci di Info.plist. Contoh berikut menunjukkan bahasa Arab yang telah ditambahkan ke array untuk CFBundleLocalizations
kunci:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ar</string>
</array>
Untuk informasi selengkapnya, lihat Dasar-Dasar Pelokalan di iOS.
Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah bahasa dan wilayah pada perangkat/simulator ke lokal kanan-ke-kiri yang ditentukan dalam Info.plist.
Peringatan
Harap dicatat bahwa saat mengubah bahasa dan wilayah ke lokal kanan-ke-kiri di iOS, tampilan apa pun DatePicker
akan memberikan pengecualian jika Anda tidak menyertakan sumber daya yang diperlukan untuk lokal. Misalnya, saat menguji aplikasi dalam bahasa Arab yang memiliki DatePicker
, pastikan bahwa mideast dipilih di bagian Internasionalisasi panel Build iOS.
Android
File AndroidManifest.xml aplikasi harus diperbarui sehingga <uses-sdk>
simpul mengatur android:minSdkVersion
atribut ke 17, dan simpul <application>
mengatur android:supportsRtl
atribut ke true
:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<uses-sdk android:minSdkVersion="17" ... />
<application ... android:supportsRtl="true">
</application>
</manifest>
Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah perangkat/emulator untuk menggunakan bahasa kanan-ke-kiri, atau dengan mengaktifkan arah tata letak Force RTL di Pengaturan > Opsi Pengembang.
Universal Windows Platform (UWP)
Sumber daya bahasa yang diperlukan harus ditentukan dalam simpul <Resources>
file Package.appxmanifest . Contoh berikut menunjukkan bahasa Arab yang telah ditambahkan ke simpul <Resources>
:
<Resources>
<Resource Language="x-generate"/>
<Resource Language="en" />
<Resource Language="ar" />
</Resources>
Selain itu, UWP mengharuskan budaya default aplikasi didefinisikan secara eksplisit dalam pustaka .NET Standard. Ini dapat dicapai dengan mengatur NeutralResourcesLanguage
atribut di AssemblyInfo.cs
, atau di kelas lain, ke budaya default:
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
Pelokalan kanan-ke-kiri kemudian dapat diuji dengan mengubah bahasa dan wilayah pada perangkat ke lokal kanan-ke-kiri yang sesuai.
Batasan
Xamarin.Forms Pelokalan kanan-ke-kiri saat ini memiliki sejumlah batasan:
NavigationPage
lokasi tombol, lokasi item toolbar, dan animasi transisi dikontrol oleh lokal perangkat, bukanFlowDirection
properti .CarouselPage
arah gesek tidak membalik.Image
konten visual tidak membalik.WebView
konten tidak menghormatiFlowDirection
properti .- Properti
TextDirection
perlu ditambahkan, untuk mengontrol perataan teks.
iOS
Stepper
orientasi dikontrol oleh lokal perangkat, bukanFlowDirection
properti .EntryCell
perataan teks dikontrol oleh lokal perangkat, bukanFlowDirection
properti .ContextActions
gerakan dan perataan tidak dibalik.
Android
SearchBar
orientasi dikontrol oleh lokal perangkat, bukanFlowDirection
properti .ContextActions
penempatan dikontrol oleh lokal perangkat, bukanFlowDirection
properti .
UWP
Editor
perataan teks dikontrol oleh lokal perangkat, bukanFlowDirection
properti .FlowDirection
properti tidak diwariskan olehFlyoutPage
anak-anak.ContextActions
perataan teks dikontrol oleh lokal perangkat, bukanFlowDirection
properti .
Paksa tata letak kanan-ke-kiri
Aplikasi Xamarin.iOS dan Xamarin.Android dapat dipaksa untuk selalu menggunakan tata letak kanan-ke-kiri, terlepas dari pengaturan perangkat, dengan memodifikasi proyek platform masing-masing.
iOS
Aplikasi Xamarin.iOS dapat dipaksa untuk selalu menggunakan tata letak kanan-ke-kiri dengan memodifikasi kelas AppDelegate sebagai berikut:
Deklarasikan
IntPtr_objc_msgSend
fungsi sebagai baris pertama di kelas AndaAppDelegate
:[System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")] internal extern static IntPtr IntPtr_objc_msgSend(IntPtr receiver, IntPtr selector, UISemanticContentAttribute arg1);
IntPtr_objc_msgSend
Panggil fungsi dariFinishedLaunching
metode , sebelum kembali dariFinshedLaunching
metode :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;
Pendekatan ini berguna untuk aplikasi yang selalu memerlukan tata letak kanan-ke-kiri, dan menghapus persyaratan untuk mengatur FlowDirection
properti.
Untuk informasi selengkapnya tentang metode ini IntrPtr_objc_msgSend
, lihat Pemilih Objective-C di Xamarin.iOS.
Android
Aplikasi Xamarin.Android dapat dipaksa untuk selalu menggunakan tata letak kanan-ke-kiri dengan memodifikasi kelas MainActivity untuk menyertakan baris berikut:
Window.DecorView.LayoutDirection = LayoutDirection.Rtl;
Catatan
Pendekatan ini mengharuskan aplikasi disiapkan untuk mendukung tata letak kanan-ke-kiri. Untuk informasi selengkapnya, lihat Penyiapan platform Android.
Pendekatan ini berguna untuk aplikasi yang selalu memerlukan tata letak kanan-ke-kiri, dan menghapus persyaratan untuk mengatur FlowDirection
properti untuk sebagian besar kontrol. Namun, beberapa kontrol, seperti CollectionView
, tidak menghormati LayoutDirection
properti dan masih mengharuskan FlowDirection
properti diatur.
Dukungan bahasa kanan ke kiri dengan Xamarin.University
Xamarin.Forms Video Dukungan Kanan-ke-Kiri 3.0