Farklı dilleri ve kültürleri destekleme

Uygulamalar belirli bir kültüre özgü kaynaklar içerir. Örneğin, bir uygulama geçerli yerel ayarın dilini seçin.

Oturum boyunca ve uygulamanızın geri kalanından ayrılan kültüre özgü kaynakları Android çözümlemeleri sistem yerel ayarına bağlı olarak dile ve kültüre özel kaynaklar Siz , oluşturmanız gerekir.

Uygulamanızı kullanan kişilerin kültürlerine göre uyarlanmış kaynaklar uygulamasını indirin. Sizin için geçerli olan herhangi bir kaynak türünü sağlayabilirsiniz. ve kullanıcılarınızın dili ve kültürüne uygun olmalıdır. Örneğin, aşağıdaki ekran görüntülerinde, cihazın varsayılan en_US yerel ayarı ve İspanyolca es_ES yerel ayarı.

Uygulamada
geçerli yerel ayara bağlı olarak farklı metin ve simge

Şekil 1. Uygulamanın kullanımı, kullanılan teknolojiye göre Mevcut yerel ayar.

Android SDK'yı kullanarak proje oluşturduğunuzda Bu araçlar, sayfanın üst düzeyinde bir res/ dizini oluşturur. gösterir. Bu res/ dizini içinde çeşitli kaynakların alt dizinleri bulunur bulunur. Ayrıca res/values/strings.xml gibi birkaç varsayılan dosya da vardır dosyasını seçin.

Farklı dilleri desteklemek, yerel ayara özel kaynakları kullanmanın ötesine geçer. Bazı kullanıcılar sağdan sola (RTL) komut dosyalarını kullanan bir dil seçer. Örneğin: Kullanıcı arayüzü yerel ayarı için Arapça veya İbranice. Kullanıcı arayüzü yerel ayarını İngilizce gibi LTR komut dosyaları içerik görüntüleyebilir veya oluşturabilir bunu RTL komut dosyalarını kullanan bir dilde yapmanız gerekir. Her iki kullanıcı türünü de desteklemek için uygulamanızın şunları yapması gerekir:

  • Sağdan sola yerel ayarları için RTL kullanıcı arayüzü düzeni kullanın.
  • İçinde görüntülenen metin verilerinin yönünü algıla ve bildir biçimlendirilmiş iletilerdir. Genellikle bir yöntem çağırın bu rehberi kullanarak metin verilerinin yönünü gösterir.

Yerel ayar dizinleri ve kaynak dosyaları oluşturma

Daha fazla yerel ayar için destek eklemek üzere res/ Her bir dizinin adı şu biçime uygun olmalıdır:

<resource type>-b+<language code>[+<country code>]

Örneğin, values-b+es/ dizesi içeriyor es dil koduna sahip yerel ayarlar için kaynaklar. Aynı şekilde, mipmap-b+es+ES/, es bulunan yerel ayarların simgelerini içerir dil kodu ve ES ülke kodu.

Android, web sitesinin yerel ayarlarına göre uygun kaynakları cihazı otomatik olarak sunar. Daha fazla bilgi için bkz. Alternatif kaynaklar sunun.

Hangi yerel ayarları destekleyeceğinize karar verdikten sonra kaynak alt dizinlerini oluşturun ve dosyası olarak da kaydedebilir. Örnek:

MyProject/
    res/
       values/
           strings.xml
       values-b+es/
           strings.xml
       mipmap/
           country_flag.png
       mipmap-b+es+ES/
           country_flag.png

Kaynak dosyalarını yerelleştirilmiş kaynaklarla doldurun. Aşağıda, yerelleştirilmiş dize ve resim kaynak dosyası örnekleri verilmiştir:

/values/strings.xml içindeki İngilizce dizeler (varsayılan yerel ayar):

<resources>
    <string name="hello_world">Hello World!</string>
</resources>

/values-b+es/strings.xml içindeki İspanyolca dizeler (es yerel ayar):

<resources>
    <string name="hello_world">¡Hola Mundo!</string>
</resources>

içinde ABD bayrağı simgesi (varsayılan yerel ayar) /mipmap/country_flag.png:

Amerika bayrağı simgesi
Amerika Birleşik Devletleri

Şekil 2. Varsayılan (en_US) yerel ayar için kullanılan simge.

Şu konumda İspanya bayrağı simgesi (es_ES yerel ayar) /mipmap-b+es+ES/country_flag.png:

Bayrak simgesi
İspanya

Şekil 3. es_ES yerel ayarı için kullanılan simge.

Not: Yapılandırma niteleyicileri kullanabilirsiniz. örneğin, yerel ayar niteleyicisi gibi. Örneğin, ekip arkadaşlarınızın bit eşlem çekilebilirlerinizin yerelleştirilmiş sürümlerini sağlayın. Daha fazla bilgi için Uygulamanızı yerelleştirme başlıklı makaleyi inceleyin.

Uygulamanızdaki kaynakları kullanma

her kaynağın name özelliği: R.<resource type>.<resource name>. Çok çeşitli Aşağıdaki örneklerde gösterildiği gibi, bir kaynağı bu şekilde kabul eden yöntemlerin listesini görebilirsiniz:

Kotlin

// Get a string resource
val hello = resources.getString(R.string.hello_world)

// Or supply a string resource to a method that requires a string
TextView(this).apply {
    setText(R.string.hello_world)
}

Java

// Get a string resource
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

XML dosyalarında söz dizimiyle bir kaynağa başvuruda bulunabilirsiniz. XML her seferinde @<resource type>/<resource name> özelliği, aşağıdaki örnekte gösterildiği gibi uyumlu bir değer kabul eder:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/country_flag" />

Not: Kullanıcı dil ayarlarına öncelik verildiğinden emin olmak için resConfigs özelliğini kullanarak uygulamanızın desteklediği dilleri doğru bir şekilde belirtin. Örneğin, daha fazla bilgi için Uygulamanızın desteklediği dilleri belirtme.

İletilerdeki metni biçimlendirme

Bir uygulamada en sık yapılan görevlerden biri metin biçimlendirmedir. Yerelleştirilmiş mesajlar uygun konumlara metin ve sayısal veriler eklenerek biçimlendirilir. Ne yazık ki RTL kullanıcı arayüzü veya RTL verileriyle çalışırken basit biçimlendirme hatalı, hatta okunamayan metin çıkışı görüntüleyebilir.

Arapça, İbranice, Farsça ve Urduca gibi diller RTL yazılır. Ancak, sayılar ve yerleştirilmiş öğeler gibi bazı öğeler LTR metinleri, LTR metinlerinin içinde LTR olarak yazılır. İngilizce de dahil olmak üzere LTR alfabeleri kullanan diller de çünkü RTL görüntülenmesi gereken yerleşik RTL komut dosyaları içerebilirler.

Uygulamalar genellikle bu tür zıt yönde yerleştirilmiş metin örnekleri oluşturur. örneğin rastgele bir metnin metin verilerini ekleyerek yerelleştirilmiş mesajlara rastgele bir metin yönü eklemek. Yol tariflerinin bu şekilde karıştırılması, çoğu zaman etkinliğin zıt yönde metin başlayıp bittiği için uygulama tarafından oluşturulur metin, kötü bir kullanıcı deneyimine neden olabilir.

Sistemin varsayılan olarak iki yönlü metin işlemesi genellikle beklendiği gibi metin alırsanız, uygulamanız çalışırken metin mesajı yerelleştirilmiş bir mesaja ekler. Aşağıda bazı durumlarda metinlerin yanlış görünme olasılığı bulunan yerler:

  • İletinin başına eklenen metin:

    PERSON_NAME sizi arıyor

  • Adres veya telefon numarası gibi bir rakamla başlayan metinler:

    987 654-3210

  • Telefon numarası gibi noktalama işaretleriyle başlayan metinler:

    +19876543210

  • Noktalama işareti ile biten metin:

    Emin misiniz?

  • Her iki yönü de içeren metin:

    בััי kelimesi İbranice'de muz anlamına gelir.

Örnek

Bir uygulamanın bazen, şunu mu demek istediniz: %s?" (çalışma zamanında %s yerine bir adres eklenmiş). Uygulama farklı kullanıcı arayüzü yerel ayarlarını desteklediğinden mesaj, yerel ayara özgü bir kaynağında yer alır ve cihaz bir RTL yerel ayarına ayarlandığında sağdan sola yönünü kullanır. Örneğin, bir İbranice için Kullanıcı arayüzünde mesaj şu şekilde görünür:

นאClaim וו GOOGLE sıraya ?> %s ne olacak?

Ancak önerilen adres metin içermeyen bir veritabanından geliyor olabilir yerel ayarın dilinde. Örneğin, adres bir yerle ilgiliyse İngilizce metin kullanılarak veritabanında görünür. Örneğin adres "15 Bay Street, Laurel, California" herhangi bir bilgi sağlamadan RTL mesajına sonuç beklenmiyor veya doğru:

Claimא}{/ ווו ל 15 Bay Street, Laurel, Kanada'da mı?

Bina numarası adresin sağında değil, sağ tarafında görünür olduğu gibi bırakılır. Bu durumda ev numarası tuhaf bir posta kodu gibi görünür girin. Aynı sorun, LTR metin yönünü kullanır.

Açıklama ve çözüm

Bu örnekteki sorun, metin biçimlendiricisinin "15" değerini belirtin bir bölümü olduğundan sistem, "15" önce gelen RTL metninin veya gelen LTR metninin bir parçasıdır. teşekkür ederiz.

Bu sorunu çözmek için BidiFormatter içindeki unicodeWrap() yöntemini kullanın sınıfını kullanır. Bu yöntem, dizenin yönünü algılar ve Unicode ile sarmalar biçimlendirme karakterlerinin olması gerekir.

Aşağıdaki kod snippet'i, tablodaki unicodeWrap():

Kotlin

val mySuggestion = "15 Bay Street, Laurel, CA"
val myBidiFormatter: BidiFormatter = BidiFormatter.getInstance()

// The "did_you_mean" localized string resource includes
// a "%s" placeholder for the suggestion.
String.format(getString(R.string.did_you_mean), myBidiFormatter.unicodeWrap(mySuggestion))

Java

String mySuggestion = "15 Bay Street, Laurel, CA";
BidiFormatter myBidiFormatter = BidiFormatter.getInstance();

// The "did_you_mean" localized string resource includes
// a "%s" placeholder for the suggestion.
String.format(getString(R.string.did_you_mean),
        myBidiFormatter.unicodeWrap(mySuggestion));

Çünkü "15" şimdi de metnin içinde LTR olarak belirtilirse, doğru konumda görüntülenir:

電א Claimכוו GOOGLE ל 15 Bay Street, Laurel, CA'da bulunabilir mi?

unicodeWrap() yöntemini şurada kullan: aşağıdakilerden birinin geçerli olması dışında, yerelleştirilmiş bir iletiye eklediğiniz her metin parçası:

  • Metin, URI gibi makine tarafından okunabilen bir dizeye ekleniyor veya SQL sorgusu olabilir.
  • Metin parçasının zaten düzgün bir şekilde kaydırıldığını biliyorsunuz.

Not: Uygulamanız Android 4.3 (API düzeyi 18) sürümünü veya daha yüksek, şurada bulunan BidiFormatter sürümünü kullanın: Android Çerçevesi. Aksi halde, Destek Kitaplığı'nda BidiFormatter bulundu.

Sayıları biçimlendirme

Tekliflerinizi otomatikleştirmek ve optimize etmek için biçim dizeleri kullanın, mantık:

Kotlin

var myIntAsString = "$myInt"

Java

String myIntAsString = String.format("%d", myInt);

Bu, sayıları yerel ayarınıza göre uygun şekilde biçimlendirir. Bu durum, farklı bir basamak grubu kullanmayı da

Bunu kullandığınızda oluşturmak için String.format() Bir cihazda, kendi rakam kümesini kullanan bir yerel ayara (ör. Farsça) ayarlanmış SQL sorgusu ve çoğu Arapça yerel ayarda, sorgu için parametrelerden herhangi biri sayılardır. Bunun nedeni, sayının yerel ayardaki basamaklarda biçimlendirilmiş olmasıdır. bu rakamlar SQL'de geçersizdir.

ASCII biçimli sayıları korumak ve SQL sorgusunun geçerli kalmasını sağlamak için Bu da String.format() ilk parametre olarak bir yerel ayar ekler. Yerel ayar bağımsız değişkenini kullanma Locale.US

Düzen yansıtmayı destekleyin

RTL komut dosyalarını kullanan kişiler, aşağıdakileri içeren RTL kullanıcı arayüzünü tercih ederler: sağa hizalı menüler, sağa hizalı metin ve ileriye doğru çıktı.

Şekil 4'te, ekranın sol alt kısmındaki Ayarlar uygulaması ve RTL karşılığı:

Bildirim alanı, sağ üst köşenin yakınına sağa hizalanır.
           uygulama çubuğundaki menü düğmesi sol üst köşenin yakınında,
           Ekranın ana bölümündeki içerik sola hizalı ve gösteriliyor
           sol alt köşeye yakın bir yerde ve sol alt köşeye yakın
           solu işaret ediyor. Bildirim alanı, sol üst köşenin yakınında sola hizalanır.
            uygulama çubuğundaki menü düğmesi sağ üst köşeye yakınken,
            ekranın ana kısmı sağa hizalı ve sağdan sola olarak görünüyor
            geri düğmesi sağ alt köşeye yakındır ve
            sağ
4. Şekil. Ayarlar ekranının soldan ve sağdan sola varyantları.

Uygulamanıza RTL desteğini eklerken şu noktaları göz önünde bulundurun:

  • Sağdan sola metin yansıtma, yalnızca şu anda çalışan cihazlarda kullanılan uygulamalarda desteklenir Android 4.2 (API düzeyi 17) veya sonraki sürümler. Metin yansıtmayı nasıl destekleyeceğinizi öğrenmek için daha eski cihazlarda Destek sağlama hakkında daha fazla bilgi edinin.
  • Uygulamanızın sağdan sola metin yönünü destekleyip desteklemediğini test etmek için geliştirici seçeneklerini kullanarak test edin ve kullanıcıları davet edin RTL komut dosyalarını kullanan kitlelere dayanıyor.

Not: Aşağıdakilerle ilgili ek tasarım yönergelerini görüntülemek için: uygun olan ve olmayan öğelerin listesi dahil olmak üzere düzen yansıtma görmek için Çift yönlülük tavsiye edilir.

Uygulamanızdaki kullanıcı arayüzü düzenini RTL yerel ayarında sağdan sola olarak yansıtmak için aşağıdaki bölümlerde belirtilen adımları tamamlayın.

Derleme ve manifest dosyalarını değiştirme

Uygulama modülünüzün build.gradle dosyasını ve uygulama manifest dosyasını değiştirin şu şekilde:

build.gradle (Module: app)

Eski

android {
    ...
    defaultConfig {
        targetSdkVersion 17 // Or higher
        ...
    }
}

Kotlin

android {
    ...
    defaultConfig {
        targetSdkVersion(17) // Or higher
        ...
    }
}

AndroidManifest.xml

<manifest ... >
    ...
    <application ...
        android:supportsRtl="true">
    </application>
</manifest>

Not: Uygulamanız Android 4.1.1 (API düzeyi 16) sürümünü veya değeri düşükse android:supportsRtl özelliği, startend otomatik olarak yeniden ekler. Bu durumda sağdan sola düzeni yansıtma uygulamanıza otomatik olarak eklenir.

Mevcut kaynakları güncelleme

left ve right değerlerini start olarak dönüştürün ve Mevcut düzen kaynak dosyalarınızda sırasıyla end. Bu sayede çerçeve, uygulamanızın kullanıcı arayüzü öğelerini kullanıcının dil ayarlarına bağlıdır.

Not: Kaynaklarınızı güncellemeden önce aşağıdakilerin nasıl yapılacağını öğrenin: eski uygulamalar için destek sağlayın veya Android 4.1.1 (API düzeyi 16) ve önceki sürümleri hedefleyen uygulamalar.

Çerçevenin sağdan sola hizalama özelliklerini kullanmak için düzen dosyalarınızı da içerebilir.

Tablo 1. Özellikleri Uygulamanız birden fazla yazılı yol tarifini desteklediğinde kullanın

Yalnızca LTR'yi destekleyen özellik LTR ve RTL'yi destekleyen özellik
android:gravity="left" android:gravity="start"
android:gravity="right" android:gravity="end"
android:layout_gravity="left" android:layout_gravity="start"
android:layout_gravity="right" android:layout_gravity="end"
android:paddingLeft android:paddingStart
android:paddingRight android:paddingEnd
android:drawableLeft android:drawableStart
android:drawableRight android:drawableEnd
android:layout_alignLeft android:layout_alignStart
android:layout_alignRight android:layout_alignEnd
android:layout_marginLeft android:layout_marginStart
android:layout_marginRight android:layout_marginEnd
android:layout_alignParentLeft android:layout_alignParentStart
android:layout_alignParentRight android:layout_alignParentEnd
android:layout_toLeftOf android:layout_toStartOf
android:layout_toRightOf android:layout_toEndOf

Tablo 2'de, sistemin hedef SDK sürümü (left ve right özellikleri olsun) tanımlanmış olup start ve end özelliklerinin tanımlanmıştır.

Tablo 2. Kullanıcı arayüzü öğesi hizalama davranışına dayalı hedef SDK sürümüne ve tanımlı özelliklere göre

Android 4.2 sürümünü hedefleme
(API düzeyi 17) veya daha yüksek olabilir?
Sol ve sağ tanımlandı mı? Başlangıcı ve bitişi tanımlı mı? Sonuç
Evet Evet Evet start ve end kullanılıyor ve geçersiz kılınıyor left ve right
Evet Evet Hayır left ve right kullanılıyor
Evet Hayır Evet start ve end kullanılıyor
Hayır Evet Evet left ve right kullanılıyor (start ve end yoksayılır)
Hayır Evet Hayır left ve right kullanılıyor
Hayır Hayır Evet start ve end, left ve right

Yol tarifi ve dile özel kaynaklar ekleyin

Bu adım, düzeninizin, çekilebilirlerinizin ve farklı diller için özelleştirilmiş değerler içeren değer kaynak dosyaları ve metinle yol tarifi alabiliyorsunuz.

Android 4.2 (API düzeyi 17) ve sonraki sürümlerde -ldrtl (düzen-yönü sağdan sola) ve -ldltr (düzen-yönü-soldan sağa) kaynak niteleyicileri içerir. Geriye dönük olarak mevcut kaynaklarla uyumluluğu sağlamakla birlikte, Android'in eski sürümleri doğru metin yönünü belirlemek için kaynağın dil niteleyicilerini kullanır.

RTL komut dosyalarını desteklemek için belirli bir düzen dosyası eklemek istediğinizi varsayalım. müzakeresine yardımcı oluyor. Bunu yapmak için res/ dizininizdeki layout-ldrtl/ dizininde, aşağıdaki örnekte gösterilmektedir:

res/
    layout/
        main.xml This layout file is loaded by default.
    layout-ldrtl/
        main.xml This layout file is loaded for languages using an
                 RTL text direction, including Arabic, Persian, and Hebrew.

Düzenin yalnızca Arapça metin kullandığınızda dizin yapınız şu şekilde görünür:

res/
    layout/
        main.xml This layout file is loaded by default.
    layout-ar/
        main.xml This layout file is loaded for Arabic text.
    layout-ldrtl/
        main.xml This layout file is loaded only for non-Arabic
                 languages that use an RTL text direction.

Not: Dile özel kaynaklar, varsayılan düzene göre öncelikli olan düzene özgü kaynaklar kaynaklar.

Desteklenen widget'ları kullanma

Android 4.2 (API düzeyi 17) sürümünden itibaren çerçeve kullanıcı arayüzü öğelerinin çoğu RTL'yi desteklemektedir. otomatik olarak yüklenir. Bununla birlikte, ViewPager, RTL metnini desteklemiyor girin.

Ana ekran widget'ları sağdan sola metin yönünü desteklediği sürece ilgili manifest dosyalarında, android:supportsRtl="true"

Eski uygulamalar için destek sağlama

Uygulamanız Android 4.1.1 (API düzeyi 16) veya önceki sürümleri hedefliyorsa şunu ekleyin: Ek olarak left ve right özellikleri start ve end.

Düzeninizin sağdan sola metin yönünü kullanması gerekip gerekmediğini kontrol etmek için şu mantığı kullanın:

Kotlin

private fun shouldUseLayoutRtl(): Boolean {
    return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        View.LAYOUT_DIRECTION_RTL == layoutDirection
    } else {
        false
    }
}

Java

private boolean shouldUseLayoutRtl() {
    if (android.os.Build.VERSION.SDK_INT >=
            android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        return View.LAYOUT_DIRECTION_RTL == getLayoutDirection();
    } else {
        return false;
    }
}

Not: Uyumluluk sorunlarını önlemek için 23.0.1 sürümünü kullanın veya daha yüksek Android SDK Derleme Araçları.

Geliştirici seçeneklerini kullanarak test etme

Android 4.4 (API düzeyi 19) veya sonraki sürümleri çalıştıran cihazlarda Sağdan sola düzeninin yönünü zorunlu kıl cihaz üzerinde geliştirici seçeneklerini inceleyebilirsiniz. Bu ayar RTL'de LTR komut dosyaları kullanan metinleri (ör. İngilizce metin) görmenizi sağlar yatırım yapmanız önemlidir.

Uygulama mantığını güncelleyin

Bu bölümde, uygulamanızın mantığının belirli yönleriyle uygulamanızı birden fazla metin yol tarifini işleyecek şekilde uyarlarken güncelleme yapabilirsiniz.

Mülk değişiklikleri

RTL ile ilgili herhangi bir özellikte (ör. düzen) değişikliği işlemek için yön, düzen parametreleri, dolgu, metin yönü, metin hizalaması veya çekilebilir konumlandırmayı kullanın: onRtlPropertiesChanged(). geri arama. Bu geri çağırma, mevcut düzen yönünü ve dolayısıyla bir etkinliğin View nesnesini uygun şekilde güncelleyin.

Görüntüleme sayısı

Bir etkinliğin doğrudan parçası olmayan bir kullanıcı arayüzü widget'ı oluşturuyorsanız bir iletişim kutusu veya kısa mesaj benzeri bir kullanıcı arayüzü öğesi gibi, görünüm hiyerarşisini düzenin yönünü belirler. Aşağıdaki kod snippet'i bu sürecin nasıl tamamlanacağını gösterir:

Kotlin

val config: Configuration = context.resources.configuration
view.layoutDirection = config.layoutDirection

Java

final Configuration config =
    getContext().getResources().getConfiguration();
view.setLayoutDirection(config.getLayoutDirection());

View sınıfının bazı yöntemleri için ek işlemler gerekir üzerinde düşünme:

onMeasure()
Görüntüleme ölçümleri, metnin yönüne göre değişiklik gösterebilir.
onLayout()
Kendi düzen uygulamanızı oluşturuyorsanız onLayout() sürümünüzde super() ve uyarlayın özel mantığınızı kullanarak RTL komut dosyalarını destekler.
onDraw()
Bir özel görünüm uyguluyorsanız veya bir görünüme gelişmiş işlev ekliyorsanız yoksa, kodunuzu RTL komut dosyalarını destekleyecek şekilde güncellemeniz gerekir. Şunu kullanın: aşağıdaki kodu kullanmanız gerekir:

Kotlin

// On devices running Android 4.1.1 (API level 16) and lower,
// you can call the isLayoutRtl() system method directly.
fun isLayoutRtl(): Boolean = layoutDirection == LAYOUT_DIRECTION_RTL

Java

// On devices running Android 4.1.1 (API level 16) and lower,
// you can call the isLayoutRtl() system method directly.
public boolean isLayoutRtl() {
    return (getLayoutDirection() == LAYOUT_DIRECTION_RTL);
}

Çekilebilir içerikler

RTL düzeni için yansıtılması gereken bir çiziminiz varsa Aşağıdaki adımlardan birini cihazda çalışan Android sürümüne göre yapın:

  • Android 4.3 (API düzeyi 18) ve önceki sürümleri çalıştıran cihazlarda -ldrtl kaynak dosyalarını ekleyip tanımlayın.
  • Android 4.4 (API düzeyi 19) ve sonraki sürümlerde android:autoMirrored="true", çekilebilir dosyanızı tanımlarken Bu da sistemin, RTL düzeni yansıtmasını sizin için işleyebilmesini sağlar.

    Not: android:autoMirrored iki yönlü yansıtma yalnızca basit çekilebilir öğeler için tüm çekilebilir öğenin grafiksel bir yansımasıdır. Çekilebilir malzemeniz birden fazla öğe içeriyorsa veya çizilebilir özelliğinizi yansıtırken yansıtmayı kendiniz gerçekleştirebilirsiniz. Her zaman İki yönlü bir uzmanla görüşerek kullanıcılara anlam ifade eder.

Yerçekimi

Uygulamanızın düzen kodunda Gravity.LEFT veya Gravity.RIGHT, bunları değiştir Gravity.START ve Sırasıyla Gravity.END.

Gravity.LEFT veya Gravity.RIGHT mülk, absoluteGravity değerini layoutDirection.

Örneğin, aşağıdaki kodu kullanıyorsanız:

Kotlin

when (gravity and Gravity.HORIZONTAL_GRAVITY_MASK) {
    Gravity.LEFT -> {
        // Handle objects that are left-aligned.
    }
    Gravity.RIGHT -> {
        // Handle objects that are right-aligned.
    }
}

Java

switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
    case Gravity.LEFT:
        // Handle objects that are left-aligned.
        break;
    case Gravity.RIGHT:
        // Handle objects that are right-aligned.
        break;
}

Şu şekilde değiştirin:

Kotlin

val absoluteGravity: Int = Gravity.getAbsoluteGravity(gravity, layoutDirection)
when (absoluteGravity and Gravity.HORIZONTAL_GRAVITY_MASK) {
    Gravity.LEFT -> {
        // Handle objects that are left-aligned.
    }
    Gravity.RIGHT -> {
        // Handle objects that are right-aligned.
    }
}

Java

final int layoutDirection = getLayoutDirection();
final int absoluteGravity =
        Gravity.getAbsoluteGravity(gravity, layoutDirection);
switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
    case Gravity.LEFT:
        // Handle objects that are left-aligned.
        break;
    case Gravity.RIGHT:
        // Handle objects that are right-aligned.
        break;
}

Bu, her bir tablodaki mevcut kodunuzu sola hizalı ve sağa hizalı değerleri (start ve ) kullansanız bile Ağırlıklılık değerleriniz için end.

Not: Yer çekimi ayarlarınızı uygularken içeren Gravity.apply() aşırı yüklenmiş sürümü layoutDirection bağımsız değişken.

Kenar boşlukları ve dolgu

Uygulamanızda RTL komut dosyalarını desteklemek için aşağıdakilerle ilgili en iyi uygulamaları izleyin: kenar boşluğu ve dolgu değerleri:

Uygulamaya özgü dil tercihlerini destekleyin

Çok dilli kullanıcılar çoğunlukla sistem dillerini İngilizce gibi tek bir dile ayarlar. belirli uygulamalar için Felemenkçe, Çince veya Hintçe gibi başka diller seçmek istediğinden emin olun. Yardım için sunduğu diğer özellikler ise Android 13'te şunlar için şu özellikleri sunuyor: birden çok dili destekleyen uygulamalar:

Ayrıca bkz.

Ek kaynaklar

Eski cihazları destekleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları inceleyin:

Blog yayınları