Uygulamalar belirli bir kültüre özgü olabilecek kaynaklar içerir. Örneğin, bir uygulama mevcut yerel ayarın diline çevrilmiş, kültüre özgü dizeler içerebilir.
Kültüre özgü kaynakları uygulamanızın geri kalanından ayrı tutmak iyi bir uygulamadır. Android, dile ve kültüre özgü kaynakları sistem yerel ayarına göre çözer. Android projenizdeki kaynaklar dizinini kullanarak farklı yerel ayarlar için destek sağlayabilirsiniz.
Uygulamanızı kullananların kültürlerine uygun kaynaklar belirtebilirsiniz. Kullanıcılarınızın diline ve kültürüne uygun olan herhangi bir kaynak türünü sağlayabilirsiniz. Örneğin, aşağıdaki ekran görüntülerinde, cihazın varsayılan en_US
ve İspanyolca es_ES
ayarlarında dize ve çekilebilir kaynakları görüntüleyen bir uygulama gösterilmektedir.
Android SDK Araçları'nı kullanarak bir proje oluşturduğunuzda, araçlar projenin en üst düzeyinde bir res/
dizini oluşturur. Bu res/
dizininde çeşitli kaynak türleri için alt dizinler bulunur. Dize değerlerinizi barındıran res/values/strings.xml
dosyası gibi birkaç varsayılan dosya da vardır.
Farklı dilleri desteklemek, yerel ayara özgü kaynakları kullanmaktan ibaret değildir. Bazı kullanıcılar, kullanıcı arayüzü yerel ayarları için sağdan sola (RTL) alfabe kullanan bir dil (ör. Arapça veya İbranice) seçer. Kullanıcı arayüzü yerel ayarlarını İngilizce gibi LTR komut dosyalarını kullanan bir dile ayarlayan diğer kullanıcılar, RTL komut dosyalarını kullanan bir dilde içerik görüntüleyebilir veya oluşturabilir. Her iki kullanıcı türünü de desteklemek için uygulamanızın şunları yapması gerekir:
- RTL yerel ayarları için RTL kullanıcı arayüzü düzeni kullanın.
- Biçimlendirilmiş mesajların içinde görüntülenen metin verilerinin yönünü tespit edip bildirin. Genellikle bu kılavuzda açıklandığı gibi, metin verilerinin yönünü sizin için belirleyen bir yöntem çağırabilirsiniz.
Yerel ayar dizinleri ve kaynak dosyaları oluşturma
Daha fazla yerel ayar desteği eklemek için res/
içinde ek dizinler oluşturun. Her dizin adı aşağıdaki biçime uygun olmalıdır:
<resource type>-b+<language code>[+<country code>]
Örneğin values-b+es/
, es
dil koduna sahip yerel ayarlar için dize kaynakları içerir. Benzer şekilde mipmap-b+es+ES/
, es
dil kodu ve ES
ülke kodunu içeren yerel ayarlar için simgeler içerir.
Android, çalışma zamanında cihazın yerel ayarlarına göre uygun kaynakları yükler. Daha fazla bilgi için Alternatif kaynaklar sağlama bölümünü inceleyin.
Hangi yerel ayarların destekleneceğine karar verdikten sonra kaynak alt dizinlerini ve dosyalarını oluşturun. Örneğin:
MyProject/ res/ values/ strings.xml values-b+es/ strings.xml mipmap/ country_flag.png mipmap-b+es+ES/ country_flag.png
Kaynak dosyalara yerelleştirilmiş kaynaklar ekleyin. Aşağıda, yerelleştirilmiş dize ve resim kaynak dosyası örnekleri verilmiştir:
/values/strings.xml
dilindeki İngilizce dizeler (varsayılan yerel ayar):
<resources> <string name="hello_world">Hello World!</string> </resources>
/values-b+es/strings.xml
dilinde İspanyolca dizeler (es
yerel ayar):
<resources> <string name="hello_world">¡Hola Mundo!</string> </resources>
/mipmap/country_flag.png
bölgesindeki ABD bayrağı simgesi (varsayılan yerel ayar):
/mipmap-b+es+ES/country_flag.png
bölgesindeki İspanyol bayrağı simgesi (es_ES
yerel ayar):
Not: Tüm kaynak türlerinde yerel ayar niteleyici gibi yapılandırma niteleyicileri kullanabilirsiniz. Örneğin, bit eşlem çekilebilirlerinizin yerelleştirilmiş sürümlerini sağlamak isteyebilirsiniz. Daha fazla bilgi için Uygulamanızı yerelleştirme başlıklı makaleyi inceleyin.
Uygulamanızdaki kaynakları kullanın
Her kaynağın name
özelliğini kullanarak kaynak kodunuzdaki ve diğer XML dosyalarınızdaki kaynaklara referans verin: R.<resource type>.<resource name>
. Aşağıdaki örneklerde gösterildiği gibi, bir kaynağı bu şekilde kabul eden çeşitli yöntemler vardır:
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);
Aşağıdaki örnekte gösterildiği gibi, XML dosyalarında XML özelliğinin uyumlu bir değer kabul ettiği durumlarda @<resource type>/<resource name>
söz dizimine sahip bir kaynağa başvurabilirsiniz:
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/country_flag" />
Not: Kullanıcı dil ayarlarına doğru öncelik verildiğinden emin olmak için resConfigs
özelliğini kullanarak uygulamanızın desteklediği dilleri belirtin. Daha fazla bilgi için Uygulamanızın desteklediği dilleri belirtme bölümüne bakın.
İletilerdeki metni biçimlendirme
Bir uygulamadaki en yaygın görevlerden biri metin biçimlendirmedir. Yerelleştirilmiş mesajlar, uygun konumlara metin ve sayısal veriler eklenerek biçimlendirilir. Maalesef, RTL kullanıcı arayüzü veya RTL verileriyle çalışırken basit biçimlendirme yanlış ve hatta okunamayan metin çıktıları görüntüleyebilir.
Arapça, İbranice, Farsça ve Urduca gibi diller RTL olarak yazılır. Ancak sayılar ve yerleştirilmiş LTR metni gibi bazı öğeler, RTL metni içinde LTR olarak yazılır. İngilizce dahil LTR komut dosyalarını kullanan diller de çift yönlüdür, çünkü sağdan sola görüntülenmesi gereken yerleşik RTL komut dosyalarını içerebilirler.
Uygulamalar genellikle bu tür yerleşik zıt yönde metin örnekleri oluşturur. Örneğin, yerelleştirilmiş mesajlara rastgele bir dille ilgili metin verileri ve isteğe bağlı bir metin yönü ekleme gibi yöntemler kullanılır. Yol tariflerinin bu şekilde karıştırılması genellikle zıt yön metninin nerede başlayıp nerede bittiğine dair net bir gösterge içermez. Bu nedenle, uygulama tarafından oluşturulan metinler kullanıcı deneyimini olumsuz yönde etkileyebilir.
Sistemin çift yönlü metni varsayılan olarak işleme şekli genellikle metni beklendiği gibi oluştursa da uygulamanız metni yerelleştirilmiş bir mesaja eklediğinde metin doğru şekilde oluşturulmayabilir. Aşağıda, metnin yanlış görünebileceği durumlara ilişkin örnekler verilmiştir:
-
İletinin başına metin eklendi:
PERSON_NAME sizi arıyor
-
Bir sayıyla başlayan metin (ör. adres veya telefon numarası):
987 654-3210
-
Noktalama işaretiyle başlayan metin (ör. telefon numarası):
+19876543210
-
Noktalama işaretleriyle biten metin:
Emin misiniz?
-
Her iki yönü de içeren metin:
labelLi kelimesi İbranicede muz anlamına geliyor.
Örnek
Bir uygulamanın, çalışma zamanında %s yerine bir adres eklenmiş olarak bazen "Bunu mu demek istediniz?" mesajını görüntülemesi gerektiğini varsayalım. Uygulama farklı kullanıcı arayüzü yerel ayarlarını destekler. Bu nedenle, mesaj yerel ayara özel bir kaynaktan gelir ve cihaz bir RTL yerel ayarına ayarlandığında sağdan sola yönünü kullanır. Örneğin, İbranice kullanıcı arayüzü için mesaj şu şekilde görünür:
"/>  ️ ಠपlanamıyor #### %s?
Ancak önerilen adres, yerel ayarın dilinde metin içermeyen bir veritabanından gelebilir. Örneğin, adres Kaliforniya'daki bir yer içinse, veritabanında İngilizce metin kullanılarak görünür. "15 Bay Street, Laurel, CA" adresini metin yönüyle ilgili herhangi bir ipucu sağlamadan RTL mesajına eklerseniz sonuç beklenmiyor veya doğru olmaz:
"/> "/> aradığında छए öneriyoruz 15 Bay Street, Laurel, CA?
Ev numarası, beklendiği gibi adresin solunda değil sağ tarafında görünür. Bu durum, ev numarasını daha garip bir posta koduna benziyor. LTR metin yönünü kullanan bir mesaja sağdan sola metin eklerseniz da aynı sorun ortaya çıkabilir.
Açıklama ve çözüm
Bu örnekteki sorun, metin biçimlendiricinin "15"in adresin bir parçası olduğunu belirtmemesi ve bu nedenle sistem, "15"in kendisinden önce gelen RTL metninin mi yoksa ondan sonra gelen LTR metninin mi olduğunu belirleyememesinden kaynaklanır.
Bu sorunu çözmek için BidiFormatter
sınıfındaki unicodeWrap()
yöntemini kullanın. Bu yöntem, bir dizenin yönünü algılar ve bu yönü belirten Unicode biçimlendirme karakterleriyle sarmalanır.
Aşağıdaki kod snippet'inde unicodeWrap()
özelliğinin nasıl kullanılacağı gösterilmektedir:
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));
"15" artık LTR olarak belirtilen metnin içinde göründüğü için doğru konumda gösterilmektedir:
Australia"/> "/> ɛ:#Etkinleştir platformları kapsayıcı 15 Bay Street, Laurel, CA?
Aşağıdakilerden biri geçerli olmadığı sürece, yerelleştirilmiş bir iletiye eklediğiniz her metin parçasında unicodeWrap()
yöntemini kullanın:
- Metin, URI veya SQL sorgusu gibi makine tarafından okunabilir bir dizeye ekleniyor.
- 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) veya sonraki sürümleri hedefliyorsa Android Framework'te bulunan BidiFormatter
sürümünü kullanın. Aksi takdirde, Destek Kitaplığı'ndaki BidiFormatter
sürümünü kullanın.
Sayıları biçimlendirme
Uygulamanızın mantığındaki sayıları dizelere dönüştürmek için yöntem çağrılarını değil, biçim dizelerini kullanın:
Kotlin
var myIntAsString = "$myInt"
Java
String myIntAsString = String.format("%d", myInt);
Bu, sayıları yerel ayarınıza uygun şekilde biçimlendirir. Bu, farklı bir basamak grubu kullanmayı içerebilir.
Farsça ve çoğu Arapça yerel ayar gibi kendi rakam grubunu kullanan bir yerel ayara ayarlanmış bir cihazda SQL sorgusu oluşturmak için String.format()
kullandığınızda, sorgudaki parametrelerden herhangi biri sayı olduğunda sorun meydana gelir. Bunun nedeni, sayının yerel ayarın basamaklarında biçimlendirilmiş olması ve bu rakamların SQL'de geçersiz olmasıdır.
ASCII biçimli sayıları korumak ve SQL sorgusunu geçerli tutmak için bunun yerine, ilk parametre olarak bir yerel ayar içeren String.format()
özelliğinin aşırı yüklenmiş sürümünü kullanmanız gerekir. Locale.US
yerel bağımsız değişkenini kullanın.
Düzen yansıtmayı destekleme
RTL komut dosyalarını kullanan kullanıcılar; sağa hizalı menüler, sağa hizalı metin ve sola işaret eden ileri oklar içeren bir RTL kullanıcı arayüzünü tercih eder.
Şekil 4'te, Ayarlar uygulamasındaki bir ekranın LTR sürümü ile RTL karşılığı arasındaki kontrast gösterilmektedir:
Uygulamanıza RTL desteği eklerken aşağıdaki noktaları göz önünde bulundurun:
- sağdan sola metin yansıtma yalnızca Android 4.2 (API düzeyi 17) veya sonraki sürümleri çalıştıran cihazlarda kullanıldığında uygulamalarda desteklenir. Eski cihazlarda metin yansıtmanın nasıl destekleneceğini öğrenmek için bu kılavuzdaki Eski uygulamalar için destek sağlama bölümüne bakın.
- Uygulamanızın sağdan sola metin yönünü destekleyip desteklemediğini test etmek için bu kılavuzda açıklandığı şekilde geliştirici seçeneklerini kullanarak test edin ve RTL komut dosyalarını kullanan kişileri uygulamanızı kullanmaya davet edin.
Not: Yansıtmaya uygun olan ve olmayan öğelerin listesi dahil olmak üzere düzen yansıtmayla ilgili ek tasarım yönergelerini görüntülemek için İki yönlülük materyal tasarım yönergelerini inceleyin.
Uygulamanızdaki kullanıcı arayüzü düzenini RTL yerel ayarında RTL'de görünecek şekilde yansıtmak için aşağıdaki bölümlerde belirtilen adımları tamamlayın.
Derleme ve manifest dosyalarını değiştirin
Uygulama modülünüzün build.gradle
dosyasını ve uygulama manifest dosyasını aşağıdaki gibi değiştirin:
build.gradle (Module: app)
Modern
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) veya önceki sürümleri hedefliyorsa uygulamanızın düzen dosyalarında görünen start
ve end
özellik değerlerinin yanı sıra android:supportsRtl
özelliği de yoksayılır. Bu durumda, sağdan sola düzen yansıtma, uygulamanızda otomatik olarak gerçekleşmez.
Mevcut kaynakları güncelleyin
Mevcut düzen kaynağı dosyalarınızda sırasıyla left
ve right
öğelerini start
ve end
biçimine dönüştürün.
Böylece çerçeve, uygulamanızın kullanıcı arayüzü öğelerini kullanıcının dil ayarlarına göre uyumlu hale getirebilir.
Not: Kaynaklarınızı güncellemeden önce, eski uygulamalar için veya Android 4.1.1 (API düzeyi 16) ve önceki sürümleri hedefleyen uygulamalar için nasıl destek sağlayacağınızı öğrenin.
Çerçevenin RTL hizalama özelliklerini kullanmak için Tablo 1'de görünen düzen dosyalarınızdaki özellikleri değiştirin.
Tablo 2'de sistemin, hedef SDK sürümüne, left
ve right
özelliklerinin tanımlanıp tanımlanmadığına ve start
ile end
özelliklerinin tanımlanıp tanımlanmadığına göre kullanıcı arayüzü hizalama özelliklerini nasıl işlediği gösterilmektedir.
|
Sol ve sağ tanımlandı mı? | Başlangıç ve bitiş tanımlandı mı? | Sonuç |
---|---|---|---|
Evet | Evet | Evet |
left ve right geçersiz kılınarak start ve end kullanılır
|
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 olarak çözümlendi
|
Yol tarifi ve dile özgü kaynaklar ekleyin
Bu adım, düzeninizin, çizimlerinizin ve değer kaynak dosyalarınızın farklı diller ve metin yönleri için özelleştirilmiş değerler içeren belirli sürümlerini eklemeyi içerir.
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 niteleyicilerini kullanabilirsiniz. Mevcut kaynaklarla geriye dönük uyumluluğu sağlamak için Android'in eski sürümleri, doğru metin yönünü belirlemek amacıyla kaynağın dil niteleyicilerini kullanır.
İbranice, Arapça ve Farsça dilleri gibi RTL komut dosyalarını desteklemek için belirli bir düzen dosyası eklemek istediğinizi varsayalım. Bunu yapmak için aşağıdaki örnekte gösterildiği gibi res/
dizininize bir layout-ldrtl/
dizini ekleyin:
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 metinler için tasarlanmış belirli bir sürümünü eklemek isterseniz dizin yapınız aşağıdaki gibi 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 özgü kaynaklar, düzene özel kaynaklara göre önceliklidir. Bu kaynaklar, varsayılan kaynaklara göre önceliklidir.
Desteklenen widget'ları kullanma
Android 4.2'den (API düzeyi 17) itibaren çoğu çerçeve kullanıcı arayüzü öğesi sağdan sola metin yönünü otomatik olarak destekler. Ancak ViewPager
gibi bazı çerçeve öğeleri RTL metin yönünü desteklemez.
Ana ekrandaki widget'lar, karşılık gelen manifest dosyaları android:supportsRtl="true"
özellik atamasını içerdiği sürece sağdan sola metin yönünü destekler.
Eski uygulamalar için destek sağlayın
Uygulamanız Android 4.1.1 (API düzeyi 16) veya önceki sürümleri hedefliyorsa start
ve end
ile birlikte left
ve right
özelliklerini ekleyin.
Düzeninizin sağdan sola metin yönünü kullanması gerekip gerekmediğini kontrol etmek için aşağıdaki 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 Android SDK Derleme Araçları'nın 23.0.1 veya sonraki bir sürümünü kullanın.
Geliştirici seçeneklerini kullanarak test etme
Android 4.4 (API düzeyi 19) veya sonraki sürümleri çalıştıran cihazlarda cihaz üzerinde geliştirici seçeneklerinden Sağdan düzen yönünü zorunlu kıl'ı etkinleştirebilirsiniz. Bu ayar, LTR komut dosyalarını kullanan metinleri (ör. İngilizce metinler) RTL modunda görmenizi sağlar.
Uygulama mantığını güncelleyin
Bu bölümde, uygulamanızı birden fazla metin talimatlarını işleyecek şekilde uyarlarken uygulamanızın güncelleme mantığının belirli yönleri açıklanmaktadır.
Mülk değişiklikleri
Düzen yönü, düzen parametreleri, dolgu, metin yönü, metin hizalaması veya çekilebilir konumlandırması gibi RTL ile ilgili herhangi bir özelliği değiştirmek için onRtlPropertiesChanged()
geri çağırma işlevini kullanın. Bu geri çağırma, mevcut düzen yönünü almanızı ve bir etkinliğin View
nesnelerini buna göre güncellemenizi sağlar.
Görüntüleme sayısı
Bir etkinliğin görünüm hiyerarşisinin doğrudan parçası olmayan bir kullanıcı arayüzü widget'ı (iletişim kutusu veya kısa ileti benzeri bir kullanıcı arayüzü öğesi gibi) oluşturuyorsanız bağlama göre doğru düzen yönünü ayarlayın. Aşağıdaki kod snippet'inde bu işlemin nasıl yapılacağı gösterilmektedir:
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 çeşitli yöntemleri için ek dikkat edilmesi gerekir:
onMeasure()
- Görünüm ölçümleri metnin yönüne bağlı olarak değişiklik gösterebilir.
onLayout()
- Kendi düzen uygulamanızı oluşturursanız
onLayout()
sürümünüzdesuper()
yöntemini çağırmanız ve özel mantığınızı RTL komut dosyalarını destekleyecek şekilde uyarlamanız gerekir. onDraw()
- Özel görünüm uyguluyor veya bir çizime gelişmiş işlevler ekliyorsanız, kodunuzu RTL komut dosyalarını destekleyecek şekilde güncellemeniz gerekir. Widget'ınızın sağdan sola modda olup olmadığını belirlemek için aşağıdaki kodu kullanın:
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
RTL düzeni için yansıtılması gereken bir çekilebilir öğeniz varsa cihazda çalışan Android sürümüne bağlı olarak aşağıdaki adımlardan birini tamamlayın:
-
Android 4.3 (API düzeyi 18) ve önceki sürümleri çalıştıran cihazlarda
-ldrtl
kaynak dosyalarını ekleyin ve tanımlayın. -
Android 4.4 (API düzeyi 19) ve sonraki sürümlerde, çekilebilir öğenizi tanımlarken sistemin RTL düzeni yansıtmasını sizin için işleyebilmesini sağlayan
android:autoMirrored="true"
kullanın.Not:
android:autoMirrored
özelliği, yalnızca çift yönlü yansıtması çekilebilir öğenin tamamının grafiksel yansıtması olan basit çekilebilir öğeler için çalışır. Çekilebilir öğeniz birden fazla öğe içeriyorsa veya çekilebilir öğenizi yansıttığınızda, yorumlanması değiştiriliyorsa yansıtma işlemini kendiniz yapabilirsiniz. Mümkün olduğunda iki yönlü bir uzmana danışarak yansıtılan çizimlerinizin kullanıcılar için anlamlı olup olmadığını belirleyin.
Yerçekimi
Uygulamanızın düzen kodu Gravity.LEFT
veya Gravity.RIGHT
kullanıyorsa bu değerleri sırasıyla Gravity.START
ve Gravity.END
olarak değiştirin.
Gravity.LEFT
veya Gravity.RIGHT
özelliklerine bağlı olan Kotlin ya da Java kodunuz varsa absoluteGravity
değerini layoutDirection
ile eşleşecek şekilde ayarlayarak kodu bu değişiklikle çalışacak şekilde uyarlayabilirsiniz.
Ö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; }
Bunu aşağıdaki ş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; }
Yani yerçekimi değerleriniz için start
ve end
kullanıyor olsanız bile, sola hizalı ve sağa hizalı değerleri işleyen mevcut kodunuzu kullanmaya devam edebilirsiniz.
Not: Yerçekimi ayarlarınızı uygularken layoutDirection
bağımsız değişkeni içeren, aşırı yüklenmiş bir Gravity.apply()
sürümü kullanın.
Kenar boşlukları ve dolgu
Uygulamanızda RTL komut dosyalarını desteklemek için kenar boşluğu ve dolgu değerleriyle ilgili bu en iyi uygulamaları izleyin:
-
Yola özgü özellik eşdeğerleri
leftMargin
verightMargin
yerinegetMarginStart()
vegetMarginEnd()
kullanın. -
setMargins()
kullanırken uygulamanız RTL komut dosyaları algılarsaleft
veright
bağımsız değişkenlerinin değerlerini değiştirin. -
Uygulamanızda özel dolgu mantığı varsa
setPadding()
vesetPaddingRelative()
değerlerini geçersiz kılın.
Uygulamaya özgü dil tercihlerini destekleme
Çok dilli kullanıcılar çoğu durumda sistem dillerini İngilizce gibi tek bir dile ayarlar, ancak belirli uygulamalar için Felemenkçe, Çince veya Hintçe gibi başka diller de seçmek isterler. Android 13, uygulamaların bu kullanıcılara daha iyi bir deneyim sunmasına yardımcı olmak için birden çok dili destekleyen uygulamalarda aşağıdaki özellikleri sunar:
-
Sistem ayarları: Kullanıcıların her uygulama için tercih ettiği dili seçebileceği merkezi bir konumdur.
Uygulamanız, sisteme birden fazla dili desteklediğini bildirmek için manifest dosyasında
android:localeConfig
özelliğini beyan etmelidir. Daha fazla bilgi edinmek için kaynak dosyası oluşturma ve bunu uygulamanızın manifest dosyasında belirtme talimatlarını inceleyin. -
Ek API'ler:
LocaleManager
uygulamasındaki l10n-placeholder1">setApplicationLocales()
ve l10n-placeholder2">getApplicationLocales()
yöntemleri gibi herkese açık API’ler, uygulamaların çalışma zamanında sistem dilinden farklı bir dil ayarlamasına olanak tanır.Özel uygulama içi dil seçiciler kullanan uygulamalar, dil tercihlerini seçtikleri yerden bağımsız olarak kullanıcılara tutarlı bir kullanıcı deneyimi sunmak için bu API'leri kullanabilir. Herkese açık API'ler, standart kod miktarını azaltmanıza yardımcı olur ve bölünmüş APK'ları destekler. Ayrıca, uygulama düzeyindeki kullanıcı dil ayarlarını depolamak için Uygulamalar için Otomatik Yedekleme'yi de desteklerler.
Önceki Android sürümleriyle geriye dönük uyumluluk için AndroidX'te eşdeğer API'ler de mevcuttur. Appcompat 1.6.0-beta01 veya daha sonraki bir sürümü kullanmanızı öneririz.
Daha fazla bilgi edinmek için yeni API'leri uygulama talimatlarına bakın.
Ayrıca bkz.
Ek kaynaklar
Eski cihazları destekleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları görüntüleyin:
Blog yayınları
- Uygulamaları Erişilebilir Hale Getirmek İçin Uygulamaları Farklı Cihazlarla Uyumlu Hale Getirme
- Küresel kitleler için içerik yazma