Uygulama kaynaklarına genel bakış (Görünümler)

Kavramlar ve Jetpack Compose uygulaması

Kaynaklar, kodunuzun kullandığı ek dosyalar ve statik içeriklerdir. Örneğin, bit eşlemler, düzen tanımları, kullanıcı arayüzü dizeleri, animasyon talimatları vb.

Resimler ve dizeler gibi uygulama kaynaklarını her zaman kodunuzdan bağımsız olarak tutun. Böylece, bunları bağımsız bir şekilde koruyabilirsiniz. Ayrıca, belirli cihaz yapılandırmaları için alternatif kaynaklar sağlayın. Bunun için kaynakları özel olarak adlandırılmış kaynak dizinlerinde gruplandırın. Android, çalışma zamanında geçerli yapılandırmaya göre uygun kaynağı kullanır. Örneğin, ekran boyutuna göre farklı bir kullanıcı arayüzü düzeni veya dil ayarına göre farklı dizeler sağlamak isteyebilirsiniz.

Uygulama kaynaklarınızı haricileştirdikten sonra, projenizin R sınıfında oluşturulan kaynak kimliklerini kullanarak bunlara erişebilirsiniz. Bu belgede, Android projenizdeki kaynakları nasıl gruplandıracağınız gösterilmektedir. Ayrıca, belirli cihaz yapılandırmaları için alternatif kaynakları nasıl sağlayacağınızı ve ardından uygulama kodunuzdan veya diğer XML dosyalarından bu kaynaklara nasıl erişeceğinizi de gösterir.

Grup kaynak türleri

Her kaynak türünü projenizin res/ dizininin belirli bir alt dizinine yerleştirin. Örneğin, basit bir projenin dosya hiyerarşisi aşağıda verilmiştir:

MyProject/
    src/
        MyActivity.java
    res/
        drawable/
            graphic.png
        layout/
            main.xml
            info.xml
        mipmap/
            icon.png
        values/
            strings.xml

res/ dizini, alt dizinlerindeki tüm kaynakları içerir: bir resim kaynağı, iki düzen kaynağı, başlatıcı simgeleri için bir mipmap/ dizini ve bir dize kaynak dosyası. Kaynak dizin adları önemlidir ve Tablo 1'de açıklanmıştır.

Tablo 1. Proje res/ dizininde kaynak dizinleri desteklenir.

Dizin

Kaynak Türü

animator/

Özellik animasyonlarını tanımlayan XML dosyaları.

anim/

Ara animasyonları tanımlayan XML dosyaları. Özellik animasyonları da bu dizine kaydedilebilir ancak iki türü ayırt etmek için özellik animasyonlarında animator/ dizini tercih edilir.

color/

Renklerin durum listesini tanımlayan XML dosyaları. Daha fazla bilgi için Renk durumu listesi kaynağı başlıklı makaleyi inceleyin.

drawable/

Aşağıdaki drawable kaynak alt türlerinde derlenen bit eşlem dosyaları (PNG, .9.png, JPG veya GIF) ya da XML dosyaları:

  • Bit eşlem dosyaları
  • Dokuz yamalı resimler (yeniden boyutlandırılabilir bit eşlemler)
  • Eyalet listeleri
  • Şekiller
  • Animasyonlu çizilebilir öğeler
  • Diğer çizilebilir öğeler

Daha fazla bilgi için Çizilebilir kaynaklar başlıklı makaleyi inceleyin.

mipmap/

Farklı başlatıcı simgesi yoğunlukları için çizilebilir dosyalar. Başlatıcı simgelerini mipmap/ klasörleriyle yönetme hakkında daha fazla bilgi için Uygulama simgelerini mipmap dizinlerine yerleştirme başlıklı makaleyi inceleyin.

layout/

Kullanıcı arayüzü düzenini tanımlayan XML dosyaları. Daha fazla bilgi için Düzen kaynağı başlıklı makaleyi inceleyin.

menu/

Seçenekler menüsü, içerik menüsü veya alt menü gibi uygulama menülerini tanımlayan XML dosyaları. Daha fazla bilgi için Menü kaynağı başlıklı makaleyi inceleyin.

raw/

Ham biçiminde kaydedilecek rastgele dosyalar. Bu kaynakları ham InputStream ile açmak için Resources.openRawResource işlevini kaynak kimliğiyle (R.raw.filename) çağırın.

Ancak orijinal dosya adlarına ve dosya hiyerarşisine erişmeniz gerekiyorsa kaynakları res/raw/ yerine assets/ dizinine kaydetmeyi düşünebilirsiniz. assets/ içindeki dosyalara kaynak kimliği verilmez. Bu nedenle, dosyaları yalnızca AssetManager kullanarak okuyabilirsiniz.

values/

Dizeler, tam sayılar ve renkler gibi basit değerler içeren XML dosyaları.

Diğer res/ alt dizinlerindeki XML kaynak dosyaları, XML dosya adına göre tek bir kaynak tanımlarken values/ dizinindeki dosyalar birden fazla kaynağı tanımlar. Bu dizindeki bir dosya için, öğesinin her alt öğesi tek bir kaynağı tanımlar. Örneğin, öğesi R.string kaynağı, öğesi ise R.color kaynağı oluşturur.

Her kaynak kendi XML öğesiyle tanımlandığından dosyayı istediğiniz gibi adlandırabilir ve farklı kaynak türlerini tek bir dosyaya yerleştirebilirsiniz. Ancak netlik açısından, benzersiz kaynak türlerini farklı dosyalara yerleştirmek isteyebilirsiniz. Örneğin, bu dizinde oluşturabileceğiniz kaynaklar için bazı dosya adı kuralları şunlardır:

Daha fazla bilgi için Dize kaynakları, Stil kaynağı ve Diğer kaynak türleri başlıklı makaleleri inceleyin.

xml/

Çalışma zamanında Resources.getXML() çağrılarak okunabilen rastgele XML dosyaları. Çeşitli XML yapılandırma dosyaları buraya kaydedilmelidir.

font/

TTF, OTF veya TTC gibi uzantılara sahip yazı tipi dosyaları ya da öğesi içeren XML dosyaları. Kaynak olarak kullanılan yazı tipleri hakkında daha fazla bilgi için Yazı tipini XML kaynağı olarak ekleme başlıklı makaleyi inceleyin.

Tablo 1'de tanımlanan alt dizinlere kaydettiğiniz kaynaklar, varsayılan kaynaklarınızdır. Yani bu kaynaklar, uygulamanızın varsayılan tasarımını ve içeriğini tanımlar. Ancak farklı türlerdeki Android destekli cihazlar, farklı türlerde kaynaklar gerektirebilir.

Örneğin, ekstra ekran alanından yararlanmak için normalden daha büyük ekranlara sahip cihazlar için farklı düzen kaynakları sağlayabilirsiniz. Ayrıca, cihazın dil ayarına göre kullanıcı arayüzünüzdeki metni çeviren farklı dize kaynakları da sağlayabilirsiniz. Farklı cihaz yapılandırmaları için bu farklı kaynakları sağlamak üzere varsayılan kaynaklarınıza ek olarak alternatif kaynaklar da sağlamanız gerekir.

Alternatif kaynaklar sağlama

Çoğu uygulama, belirli cihaz yapılandırmalarını desteklemek için alternatif kaynaklar sağlar. Örneğin, farklı ekran yoğunlukları için alternatif çizilebilir kaynaklar ve farklı diller için alternatif dize kaynakları ekleyin. Çalışma zamanında Android, mevcut cihaz yapılandırmasını algılar ve uygulamanız için uygun kaynakları yükler.

Şekil 1. Ekran boyutuna göre farklı düzen kaynakları kullanan iki cihaz.

Bir dizi kaynak için yapılandırmaya özel alternatifler belirtmek üzere aşağıdakileri yapın:

  1. res/ içinde <resources_name>-<qualifier> biçiminde adlandırılmış yeni bir dizin oluşturun.

    • <resources_name>, ilgili varsayılan kaynakların (Tablo 1'de tanımlanmıştır) dizin adıdır.
    • <qualifier>, bu kaynakların kullanılacağı bireysel bir yapılandırmayı belirten bir addır (Tablo 2'de tanımlanmıştır).

    Birden fazla <qualifier> ekleyebilirsiniz. Her birini tireyle ayırın.

  2. Bu yeni dizine uygun alternatif kaynakları kaydedin. Kaynak dosyalar, varsayılan kaynak dosyalarla tam olarak aynı şekilde adlandırılmalıdır.

Örneğin, bazı varsayılan ve alternatif kaynaklar aşağıda verilmiştir:

res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

hdpi niteleyicisi, söz konusu dizindeki kaynakların yüksek yoğunluklu ekranlara sahip cihazlar için olduğunu gösterir. Bu drawable dizinlerindeki resimler belirli ekran yoğunlukları için boyutlandırılır ancak dosya adları tamamen aynıdır. Bu sayede, icon.png veya background.png resmine referans vermek için kullandığınız kaynak kimliği her zaman aynı olur. Android, cihaz yapılandırma bilgilerini kaynak dizin adındaki niteleyicilerle karşılaştırarak her kaynağın mevcut cihaza en uygun sürümünü seçer.

Tablo 2'de, geçerli yapılandırma niteleyicileri öncelik sırasına göre listelenmektedir. Her niteleyiciyi tireyle ayırarak bir dizin adına birden fazla niteleyici ekleyebilirsiniz. Bir kaynak dizini için birden fazla niteleyici kullanıyorsanız bunları, tabloda listelendikleri sırayla dizin adına eklemeniz gerekir.

Tablo 2. Yapılandırma niteleyici adları.

Yapılandırma

Niteleyici değerleri

Açıklama

MCC ve MNC

Örnekler:

mcc310

mcc310-mnc004

mcc208-mnc00

Mobil ülke kodu (MCC), isteğe bağlı olarak cihazdaki SIM kartın mobil ağ kodu (MNC) ile birlikte. Örneğin, mcc310 herhangi bir operatörde ABD, mcc310-mnc004 Verizon'da ABD, mcc208-mnc00 ise Orange'da Fransa anlamına gelir.

Cihaz radyo bağlantısı kullanıyorsa (yani GSM telefonsa) MCC ve MNC değerleri SIM karttan alınır.

Örneğin, uygulamanıza ülkeye özgü yasal kaynaklar eklemek için MCC'yi tek başına da kullanabilirsiniz. Yalnızca dile göre belirtmeniz gerekiyorsa bunun yerine dil, alfabe (isteğe bağlı) ve bölge (isteğe bağlı) niteleyicisini kullanın. MM ve MNC niteleyicisini kullanıyorsanız dikkatli bir şekilde kullanın ve beklendiği gibi çalıştığını test edin.

Ayrıca, sırasıyla mevcut mobil ülke kodunu ve mobil ağ kodunu gösteren yapılandırma alanları mcc ve mnc'ya da bakın.

Dil, yazı sistemi (isteğe bağlı) ve bölge (isteğe bağlı)

Örnekler:

en

fr

en-rUS

fr-rFR

fr-rCA

b+en

b+en+US

b+es+419

b+zh+Hant

b+sr+Latn+RS

Dil, iki harfli ISO 639-2{:.external} dil koduyla tanımlanır. İsteğe bağlı olarak, iki harfli ISO 3166-1-alpha-2{:.external} bölge kodu (küçük harfli r ile başlar) eklenebilir.

Kodlar büyük/küçük harfe duyarlı değildir. Bölge kısmını ayırt etmek için r öneki kullanılır. Yalnızca bir bölge belirtemezsiniz.

Android 7.0 (API düzeyi 24), dil ve bölgeye özgü kaynakları nitelendirmek için kullanabileceğiniz BCP 47 dil etiketleri{:.external} desteğini kullanıma sundu. Dil etiketi, her biri genel etiket tarafından tanımlanan dil aralığını daraltan veya iyileştiren bir veya daha fazla alt etiketin sırasından oluşur. Dil etiketleri hakkında daha fazla bilgi için Tags for Identifying Languages{:.external} başlıklı makaleyi inceleyin.

BCP 47 dil etiketi kullanmak için b+ ve iki harfli bir ISO 639-2{:.external} dil kodunu birleştirin. İsteğe bağlı olarak, + ile ayrılmış ek alt etiketler de ekleyebilirsiniz.

Kullanıcılar sistem ayarlarında dili değiştirirse dil etiketi, uygulamanızın kullanım ömrü boyunca değişebilir. Bu durumun uygulamanızı çalışma zamanında nasıl etkileyebileceği hakkında bilgi edinmek için Yapılandırma değişikliklerini işleme başlıklı makaleyi inceleyin.

Uygulamanızı diğer diller için yerelleştirme hakkında eksiksiz bir rehber için Uygulamanızı yerelleştirme başlıklı makaleyi inceleyin.

Ayrıca, tanımlanmış yerel ayarlar listesini sağlayan getLocales yöntemine de bakın. Bu listede birincil yerel ayar bulunur.

Dil bilgisine uygun cinsiyet masculine
feminine
neuter

Kullanıcının dil bilgisine uygun cinsiyeti. Dil bilgisine uygun cinsiyet içeren dillerde kullanılır.

Örneğin, Fransızca konuşan kullanıcılara farklı kaynaklar sağlamanız gerekiyorsa aşağıdaki gibi dizinleri kullanabilirsiniz:

res/
  values-fr/
    strings.xml (cinsiyet belirtilmeyen varsayılan dizeler)
  values-fr-masculine/
    strings.xml (erkek cinsiyetli dizeler)
  values-fr-feminine/
    strings.xml (kadın cinsiyetli dizeler)
  values-fr-neuter/
    strings.xml (nötr cinsiyetli dizeler)

Android'de Dil Bilgisi Çekimi başlıklı makaleyi inceleyin.

Dilbilgisel cinsiyeti belirten getGrammaticalGender() yapılandırma yöntemine de bakın.

API düzeyi 34'te eklendi.

Düzen yönü

ldrtl

ldltr

Uygulamanızın düzen yönü. ldrtl, "layout-direction-right-to-left" (düzen yönü sağdan sola) anlamına gelir. ldltr, "layout-direction-left-to-right" (düzen yönü soldan sağa) anlamına gelir ve varsayılan örtülü değerdir.

Bu, düzenler, çizilebilir öğeler veya değerler gibi tüm kaynaklar için geçerli olabilir.

Örneğin, Arapça için belirli bir düzen, Farsça veya İbranice gibi diğer "sağdan sola" diller için ise genel bir düzen sağlamak istiyorsanız aşağıdaki gibi dizinler kullanırsınız:

res/
layout/
main.xml
(varsayılan düzen)
layout-ar/
main.xml (Arapça için özel düzen)
layout-ldrtl/
main.xml ("ar" dil niteleyicisi daha yüksek önceliğe sahip olduğundan Arapça hariç tüm sağdan sola diller)

Not: Uygulamanızda sağdan sola düzen özelliklerini etkinleştirmek için SupportsRtl ayarını "true" olarak, TargetSdkVersion ayarını ise 17 veya daha yüksek bir değere ayarlamanız gerekir.

API düzeyi 17'de eklendi.

En küçük genişlik

swdp

Örnekler:

sw320dp

sw600dp

sw720dp

vb.

Bir uygulamanın kullanabileceği ekran alanının en kısa boyutu. Özellikle, uygulama penceresinin smallestWidth, pencerenin kullanılabilir yüksekliği ve genişliği arasındaki en kısa boyuttur. Bunu pencerenin "mümkün olan en küçük genişliği" olarak da düşünebilirsiniz. Uygulamanızın kullanıcı arayüzü için en az dp genişlik kullanılabilmesi amacıyla bu niteleyiciyi kullanabilirsiniz.

Örneğin, düzeninizin ekran alanının en küçük boyutunun her zaman en az 600 dp olmasını gerektiriyorsa düzen kaynaklarını res/layout-sw600dp/ dizininde oluşturmak için bu niteleyiciyi kullanabilirsiniz. Sistem, bu kaynakları yalnızca kullanılabilir ekranın en küçük boyutu 600 dp olduğunda kullanır. 600 dp'lik tarafın kullanıcı tarafından algılanan yükseklik veya genişlik olması fark etmez. Pencerenin yeniden boyutlandırılması, kullanılabilir genişlik/yükseklik değerinin değiştirilmesi veya pencerenin yeniden konumlandırılması durumunda en küçük genişlik değişebilir. Bu değişiklikler, sistemin iç kısımlarını da etkileyebilir.

Genel ekran boyutunu belirlemek için en küçük genişliği kullanmak faydalıdır. Çünkü genişlik genellikle düzen tasarlamada belirleyici faktördür. Kullanıcı arayüzü genellikle dikey olarak kaydırılır ancak yatay olarak ihtiyaç duyduğu minimum alan konusunda oldukça katı kısıtlamaları vardır.

Kullanılabilir genişlik, cep telefonları için tek panelli düzenin mi yoksa tabletler için çok panelli düzenin mi kullanılacağını belirlemede de önemli bir faktördür. Bu nedenle, her cihazda mümkün olan en küçük genişliğin ne olduğuyla en çok ilgilenmeniz gerekir.

Cihazın en küçük genişliğinde ekran süslemeleri ve sistem kullanıcı arayüzü dikkate alınır. Örneğin, cihazın ekranında en küçük genişlik ekseni boyunca alan kaplayan kalıcı kullanıcı arayüzü öğeleri varsa sistem, en küçük genişliği gerçek ekran boyutundan daha küçük olarak bildirir. Bunun nedeni, bu öğelerin kullanıcı arayüzünüz için kullanılamayan ekran pikselleri olmasıdır.

Burada yaygın ekran boyutları için kullanabileceğiniz bazı değerler:

  • Aşağıdaki gibi ekran yapılandırmalarına sahip cihazlar için 320:
    • 240x320 ldpi (QVGA telefon)
    • 320x480 mdpi (cep telefonu)
    • 480x800 hdpi (yüksek yoğunluklu telefon)
  • 480x800 mdpi (tablet/cep telefonu) gibi ekranlar için 480
  • 600x1024 mdpi (7 inç tablet) gibi ekranlar için 600
  • 720x1280 mdpi (10 inç tablet) gibi ekranlar için 720

Uygulamanız, smallestWidth niteleyicisi için farklı değerlere sahip birden fazla kaynak dizini sağladığında sistem, cihazın smallestWidth değerine en yakın olanı (aşmadan) kullanır.

API düzeyi 13'te eklendi.

Ayrıca, uygulamanızın uyumlu olduğu minimum smallestWidth'yi bildiren android:requiresSmallestWidthDp özelliğine ve cihazın smallestWidth değerini içeren smallestScreenWidthDp yapılandırma alanına da bakın.

Bu niteleyiciyi kullanarak farklı ekranlar için tasarım yapma hakkında daha fazla bilgi edinmek için Görünümlerle duyarlı/uyarlanabilir tasarım başlıklı makaleyi inceleyin.

Kullanılabilir genişlik ve yükseklik

wdp

hdp

Örnekler:

w720dp

w1024dp

h720dp

h1024dp

vb.

Kaynağın kullanıldığı minimum kullanılabilir ekran genişliğini veya yüksekliğini ( değeriyle tanımlanan dp birimlerinde) belirtir. Bu yapılandırma değerleri, cihaz yönü dikey ve yatay arasında değiştiğinde, cihaz katlandığında veya açıldığında ya da sistem çok pencereli moda girdiğinde veya bu moddan çıktığında mevcut ekran genişliği ve yüksekliğiyle karşılaştırılır. Çoklu pencere modunda değerler, cihaz ekranının genişliğini ve yüksekliğini değil, uygulamayı içeren pencerenin genişliğini ve yüksekliğini yansıtır. Benzer şekilde, yerleştirilmiş etkinliklerde değerler ekranın genişliği ve yüksekliğiyle değil, tek tek etkinliklerin genişliği ve yüksekliğiyle ilgilidir. Daha fazla bilgi için Etkinlik yerleştirme başlıklı makaleyi inceleyin.

Kullanılabilir genişlik ve yükseklik, çok panelli düzen kullanılıp kullanılmayacağını belirlemek için genellikle yararlıdır. Bunun nedeni, tablet cihazlarda bile dikey yönlendirme için kullanılan çok panelli düzenin yatay yönlendirme için kullanılanla aynı olmasının istenmemesidir. Bu nedenle, ekran boyutu ve yön niteleyicilerini birlikte kullanmak yerine, düzen için gereken minimum genişliği ve/veya yüksekliği belirtmek üzere bunları kullanabilirsiniz.

Uygulamanız bu yapılandırmalar için farklı değerlere sahip birden fazla kaynak dizini sağladığında sistem, cihazın mevcut ekran genişliğine en yakın olanı (aşmadan) kullanır. En yakın, gerçek ekran genişliği ile belirtilen genişlik arasındaki farklara, belirtilmeyen yükseklik ve genişliklerin 0 değeriyle birlikte gerçek ekran yüksekliği ile belirtilen yükseklik arasındaki farkların eklenmesiyle belirlenir.

Değerler, pencere iç kısımlarının kapladığı alanı hariç tutar. Bu nedenle, cihazın ekran kenarlarında kalıcı kullanıcı arayüzü öğeleri varsa uygulama Window.setDecorFitsSystemWindows veya WindowCompat.setDecorFitsSystemWindows kullanılarak kenardan kenara gösterilse bile genişlik ve yükseklik değerleri gerçek ekran boyutlarından daha küçüktür.

Sabit olmayan bazı dikey ekran süslemeleri (ör. tam ekran modunda gizlenebilen telefon durum çubuğu) ve pencere süslemeleri (ör. başlık çubuğu veya işlem çubuğu) burada hesaba katılmamıştır. Bu nedenle uygulamalar, belirttiklerinden biraz daha küçük bir alanla başa çıkmaya hazır olmalıdır.

Not: Sistem, hem genişlik hem de yükseklik açısından eşleşen kaynağı seçer. Bu nedenle, her ikisini de belirten bir kaynak, yalnızca birini belirten bir kaynağa göre çok daha fazla tercih edilir. Örneğin, gerçek ekran 720 dp genişliğinde ve 1.280 dp yüksekliğinde ise ve bir kaynak w720dp ile nitelendirilmiş, diğeri ise w700dp-h1200dp olarak nitelendirilmişse, ilki belirttiğiyle tam olarak eşleşse bile ikincisi seçilir.

API düzeyi 13'te eklendi.

Ayrıca, mevcut ekran genişliğini ve yüksekliğini içeren screenWidthDp ve screenHeightDp yapılandırma alanlarına da bakın.

Bu niteleyiciyi kullanarak farklı ekranlar için tasarım yapma hakkında daha fazla bilgi edinmek için Görünümlerle duyarlı/uyarlanabilir tasarım başlıklı makaleyi inceleyin.

Ekran boyutu

small

normal

large

xlarge

  • small: Düşük yoğunluklu QVGA ekranla benzer boyuttaki ekranlar. Küçük ekran için minimum düzen boyutu yaklaşık 320x426 dp birimidir. Örnekler arasında QVGA düşük yoğunluk ve VGA yüksek yoğunluk yer alır.
  • normal: Orta yoğunluklu bir HVGA ekranla benzer boyuttaki ekranlar. Normal bir ekran için minimum düzen boyutu yaklaşık 320x470 dp birimidir. Bu tür ekranlara örnek olarak WQVGA düşük yoğunluklu, HVGA orta yoğunluklu ve WVGA yüksek yoğunluklu ekranlar verilebilir.
  • large: Orta yoğunluklu bir VGA ekranla benzer boyutta olan ekranlar. Büyük ekran için minimum düzen boyutu yaklaşık 480x640 dp birimidir. Örnek olarak VGA ve WVGA orta yoğunluklu ekranlar verilebilir.
  • xlarge: Geleneksel orta yoğunluklu HVGA ekranından önemli ölçüde büyük olan ekranlar. Çok büyük bir ekran için minimum düzen boyutu yaklaşık 720x960 dp birimidir. Çoğu durumda, çok büyük ekranlı cihazlar cepte taşınamayacak kadar büyüktür ve büyük olasılıkla tablet tarzı cihazlardır. API düzeyi 9'da eklenmiştir.

Not: Boyut niteleyicisi kullanmak, kaynakların yalnızca o boyuttaki ekranlar için olduğu anlamına gelmez. Mevcut cihaz yapılandırmasına daha iyi uyan niteleyicilerle alternatif kaynaklar sağlamazsanız sistem, en iyi eşleşme olan kaynakları kullanabilir.

Dikkat: Tüm kaynaklarınız mevcut ekrandan daha büyük bir boyut niteleyicisi kullanıyorsa sistem bunları kullanmaz ve uygulamanız çalışma zamanında çöker. Örneğin, tüm düzen kaynakları xlarge niteleyicisiyle etiketlenmişse ancak cihazın ekranı normal boyuttaysa bu durum oluşur.

API düzeyi 4'te eklenmiştir.

Ekranın küçük, normal veya büyük olduğunu belirten screenLayout yapılandırma alanına da bakın.

Daha fazla bilgi için Ekran uyumluluğuna genel bakış başlıklı makaleyi inceleyin.

Ekran en-boy oranı

long

notlong

  • long: WQVGA, WVGA, FWVGA gibi uzun ekranlar
  • notlong: QVGA, HVGA ve VGA gibi uzun ekranlar değil

API düzeyi 4'te eklenmiştir.

Bu tamamen ekranın en boy oranına bağlıdır (long ekran daha geniştir). Bu durum, ekran yönüyle ilgili değildir.

Ekranın uzun olup olmadığını belirten screenLayout yapılandırma alanına da bakın.

Yuvarlak ekran

round

notround

  • round: Yuvarlak ekranlar (ör. yuvarlak bir giyilebilir cihaz)
  • notround: telefon veya tablet gibi dikdörtgen ekranlar

API düzeyi 23'te eklenmiştir.

Ekranın yuvarlak olup olmadığını gösteren isScreenRound yapılandırma yöntemine de bakın.

Wide Color Gamut

widecg

nowidecg

  • widecg: Display P3 veya AdobeRGB gibi geniş renk gamına sahip ekranlar
  • nowidecg: sRGB gibi dar renk gamına sahip ekranlar

API düzeyi 26'da eklendi.

Ekranın geniş renk gamına sahip olup olmadığını gösteren isScreenWideColorGamut yapılandırma yöntemine de bakın.

Yüksek Dinamik Aralık (HDR)

highdr

lowdr

  • highdr: Yüksek dinamik aralığa sahip ekranlar
  • lowdr: Düşük/standart dinamik aralığa sahip ekranlar

API düzeyi 26'da eklendi.

Ekranın HDR özelliklerine sahip olup olmadığını belirten isScreenHdr yapılandırma yöntemine de bakın.

Ekran yönlendirme

port

land

  • port: cihaz dikey yöndedir
  • land: Cihaz yatay yöndedir.

Kullanıcı ekranı döndürürse bu durum uygulamanızın kullanım süresi boyunca değişebilir. Bu durumun çalışma zamanında uygulamanızı nasıl etkileyeceği hakkında bilgi edinmek için Yapılandırma değişikliklerini işleme başlıklı makaleyi inceleyin.

Ayrıca, mevcut cihaz yönünü gösteren orientation yapılandırma alanına da bakın.

Kullanıcı arayüzü modu

car

desk

television

appliance

watch

vrheadset

  • car: Cihaz, araç kiti yuvasında gösteriliyorsa
  • desk: Cihaz, masaüstü dock'unda gösteriliyorsa
  • television: Cihaz, televizyonda görüntüleniyor. Kullanıcıdan uzakta olan büyük bir ekranda kullanıcı arayüzünün gösterildiği ve deneyimin öncelikle d-pad veya işaretçi olmayan diğer etkileşimler etrafında şekillendiği bir "on ayak" deneyimi sunuluyor.
  • appliance: Cihaz, ekranı olmayan bir cihaz olarak kullanılıyor
  • watch: Cihazın ekranı var ve bileğe takılıyor
  • vrheadset: Cihaz, sanal gerçeklik başlığında gösteriliyor

API düzeyi 8'de eklendi; televizyon API 13'te, cihaz API 16'da, kol saati API 20'de, VR başlığı API 26'da eklendi.

Uygulamanızın, cihaz bir yuvaya takıldığında veya yuvadan çıkarıldığında nasıl yanıt verebileceği hakkında bilgi edinmek için Yerleştirme durumunu ve türünü belirleme ve izleme başlıklı makaleyi inceleyin.

Kullanıcı cihazı bir yerleştirme istasyonuna koyarsa bu durum uygulamanızın kullanım ömrü boyunca değişebilir. Bu modlardan bazılarını UiModeManager simgesini kullanarak etkinleştirebilir veya devre dışı bırakabilirsiniz. Bu durumun çalışma zamanında uygulamanızı nasıl etkileyeceği hakkında bilgi edinmek için Yapılandırma değişikliklerini işleme başlıklı makaleyi inceleyin.

Gece modu

night

notnight

  • night: gece
  • notnight: gündüz

API düzeyi 8'de eklendi.

Gece modu otomatik modda (varsayılan) bırakılırsa bu durum uygulamanızın kullanım süresi boyunca değişebilir. Bu durumda mod, günün saatine göre değişir. Bu modu UiModeManager kullanarak etkinleştirebilir veya devre dışı bırakabilirsiniz. Bu durumun çalışma zamanında uygulamanızı nasıl etkileyeceği hakkında bilgi edinmek için Yapılandırma değişikliklerini işleme başlıklı makaleyi inceleyin.

Ekran piksel yoğunluğu (dpi)

ldpi

mdpi

hdpi

xhdpi

xxhdpi

xxxhdpi

nodpi

tvdpi

anydpi

nnndpi

  • ldpi: düşük yoğunluklu ekranlar; yaklaşık 120 dpi.
  • mdpi: orta yoğunluklu (geleneksel HVGA) ekranlar; yaklaşık 160 dpi.
  • hdpi: Yüksek yoğunluklu ekranlar; yaklaşık 240 DPI.
  • xhdpi: Ekstra yüksek yoğunluklu ekranlar; yaklaşık 320 DPI. API düzeyi 8'de eklendi.
  • xxhdpi: Çok çok yüksek yoğunluklu ekranlar; yaklaşık 480 dpi. API düzeyi 16'da eklendi.
  • xxxhdpi: extra-extra-extra-high-density uses (launcher icon only—see Support different pixel densities); approximately 640 dpi. API düzeyi 18'de eklendi.
  • nodpi: Cihaz yoğunluğuyla eşleşecek şekilde ölçeklendirilmesini istemediğiniz bit eşlem kaynakları için kullanılır.
  • tvdpi: mdpi ve hdpi arasında bir yerde olan ekranlar; yaklaşık 213 dpi. Bu, "birincil" yoğunluk grubu olarak kabul edilmez. Bu ayar, çoğunlukla 720p televizyonlar için tasarlanmıştır ve çoğu uygulama için gerekli değildir. 1080p TV panelleri için xhdpi, 4K TV panelleri için ise xxxhdpi kullanın. API düzeyi 13'te eklendi.
  • anydpi: Tüm ekran yoğunluklarıyla eşleşir ve diğer niteleyicilere göre önceliklidir. Bu, vektör çizilebilir öğeler için kullanışlıdır. API düzeyi 21'de eklendi.
  • nnndpi: nnn pozitif bir tam sayı ekran yoğunluğu olmak üzere standart olmayan yoğunlukları temsil etmek için kullanılır. Bu özellik çoğu durumda kullanılmaz. Standart yoğunluk grupları kullanmak, piyasadaki çeşitli cihaz ekran yoğunluklarını desteklemenin ek yükünü büyük ölçüde azaltır.

Altı birincil yoğunluk arasında (tvdpi yoğunluğu hariç) 3:4:6:8:12:16 ölçeklendirme oranı vardır. Bu nedenle, ldpi'deki 9x9 boyutlu bir bitmap, mdpi'de 12x12, hdpi'de 18x18, xhdpi'da 24x24 boyutundadır.

Not: Yoğunluk niteleyicisi kullanmak, kaynakların yalnızca bu yoğunluktaki ekranlar için olduğu anlamına gelmez. Mevcut cihaz yapılandırmasıyla daha iyi eşleşen niteleyicilere sahip alternatif kaynaklar sağlamazsanız sistem, en iyi eşleşen kaynakları kullanır.

Farklı ekran yoğunluklarının nasıl işleneceği ve Android'in, bit eşlemlerinizi mevcut yoğunluğa uyacak şekilde nasıl ölçekleyebileceği hakkında daha fazla bilgi için Ekran uyumluluğuna genel bakış bölümüne bakın.

Dokunmatik ekran türü

notouch

finger

  • notouch: Cihazda dokunmatik ekran yok.
  • finger: Cihazda, kullanıcının parmağıyla doğrudan etkileşim kurularak kullanılması amaçlanan bir dokunmatik ekran bulunur.

Cihazdaki dokunmatik ekranın türünü belirten touchscreen yapılandırma alanına da bakın.

Klavye kullanılabilirliği

keysexposed

keyshidden

keyssoft

  • keysexposed: Cihazda klavye mevcuttur. Cihazda yazılım klavyesi etkinse (büyük olasılıkla), donanım klavyesi kullanıcıya gösterilmediğinde veya cihazda donanım klavyesi yoksa bile bu klavye kullanılır. Yazılım klavyesi sağlanmıyorsa veya devre dışı bırakılmışsa bu yalnızca donanım klavyesi kullanıldığında geçerlidir.
  • keyshidden: Cihazda donanım klavyesi mevcut ancak gizli ve cihazda yazılım klavyesi etkin değil.
  • keyssoft: Cihazda, görünür olsun veya olmasın, yazılım klavyesi etkinleştirilmiştir.

keysexposed kaynakları sağlarsanız ancak keyssoft kaynakları sağlamazsanız sistem, klavye görünür olsun veya olmasın keysexposed kaynaklarını kullanır (sistemde yazılım klavyesi etkin olduğu sürece).

Kullanıcı bir donanım klavyesi açarsa bu durum uygulamanızın kullanım ömrü boyunca değişebilir. Bu durumun çalışma zamanında uygulamanızı nasıl etkileyeceği hakkında bilgi edinmek için Yapılandırma değişikliklerini işleme başlıklı makaleyi inceleyin.

Donanım klavyesinin görünürlüğünü ve yazılım klavyesi de dahil olmak üzere herhangi bir klavye türünün görünürlüğünü gösteren hardKeyboardHidden ve keyboardHidden yapılandırma alanlarına da bakın.

Birincil metin giriş yöntemi

nokeys

qwerty

12key

  • nokeys: Cihazda metin girişi için donanım tuşları yok.
  • qwerty: Cihazda, kullanıcıya görünür olsun veya olmasın, donanım Q klavye bulunur.
  • 12key: Cihazda, kullanıcıya görünür olsun veya olmasın 12 tuşlu bir donanım klavyesi bulunur.

Ayrıca, kullanılabilen birincil metin giriş yöntemini belirten keyboard yapılandırma alanına da bakın.

Gezinme tuşunun kullanılabilirliği

navexposed

navhidden

  • navexposed: Kullanıcıya gezinme tuşları sunulur.
  • navhidden: Gezinme tuşları kullanılamıyorsa (ör. kapalı bir kapağın arkasında).

Kullanıcı gezinme tuşlarını gösterirse bu durum uygulamanızın kullanım ömrü boyunca değişebilir. Bu durumun çalışma zamanında uygulamanızı nasıl etkileyeceği hakkında bilgi edinmek için Yapılandırma değişikliklerini işleme başlıklı makaleyi inceleyin.

Ayrıca, gezinme tuşlarının gizlenip gizlenmediğini belirten navigationHidden yapılandırma alanına da bakın.

Birincil dokunmatik olmayan gezinme yöntemi

nonav

dpad

trackball

wheel

  • nonav: Cihazda dokunmatik ekran dışında gezinme özelliği yok.
  • dpad: Cihazda gezinme için yön tuşları (D-pad) bulunur.
  • trackball: Cihazda gezinme için trackball var.
  • wheel: Cihazda gezinme için yön tekerlekleri var (yaygın değildir).

Ayrıca, mevcut gezinme yönteminin türünü belirten navigation yapılandırma alanına da bakın.

Platform sürümü (API düzeyi)

Örnekler:

v3

v4

v7

vb.

Cihazın desteklediği API düzeyi. Örneğin, v1 API düzeyi 1 (Android 1.0 veya sonraki sürümlerin yüklü olduğu cihazlar) ve v4 API düzeyi 4 (Android 1.6 veya sonraki sürümlerin yüklü olduğu cihazlar) için. Bu değerler hakkında daha fazla bilgi için Android API düzeyleri belgesine bakın.

Nitelik adı kuralları

Yapılandırma niteleyici adlarını kullanmayla ilgili bazı kurallar şunlardır:

  • Tek bir kaynak grubu için tireyle ayrılmış birden fazla niteleyici belirtebilirsiniz. Örneğin, drawable-en-rUS-land, yatay yöndeki ABD İngilizcesi cihazlarda geçerlidir.
  • Niteleyiciler, 2. tabloda listelenen sırada olmalıdır.
    • Yanlış: drawable-hdpi-port/
    • Doğru: drawable-port-hdpi/
  • Alternatif kaynak dizinleri iç içe yerleştirilemez. Örneğin, res/drawable/drawable-en/ kullanamazsınız.
  • Değerler büyük/küçük harfe duyarlı değildir. Kaynak derleyici, büyük/küçük harfe duyarsız dosya sistemlerinde sorunları önlemek için dizin adlarını işleme almadan önce küçük harfe dönüştürür. Adlardaki büyük harfler yalnızca okunabilirliği artırmak için kullanılır.
  • Her niteleyici türü için yalnızca bir değer desteklenir. Örneğin, İspanya ve Fransa için aynı çizilebilir dosyaları kullanmak istiyorsanız drawable-es-fr/ adlı bir dizininiz olamaz. Bunun yerine, uygun dosyaları içeren drawable-es/ ve drawable-fr/ gibi iki kaynak dizinine ihtiyacınız vardır. Ancak dosyaları her iki konumda da gerçekten kopyalamanız gerekmez. Bunun yerine, Takma ad kaynakları oluşturma bölümünde açıklandığı gibi, bir kaynak için takma ad oluşturabilirsiniz.

Alternatif kaynakları bu niteleyicilerle adlandırılmış dizinlere kaydettikten sonra Android, mevcut cihaz yapılandırmasına göre uygulamanızdaki kaynakları otomatik olarak uygular. Bir kaynak her istendiğinde Android, istenen kaynak dosyasını içeren alternatif kaynak dizinlerini kontrol eder ve ardından en iyi eşleşen kaynağı bulur.

Belirli bir cihaz yapılandırmasıyla eşleşen alternatif kaynak yoksa Android, ilgili varsayılan kaynakları (yapılandırma niteleyicisi içermeyen belirli bir kaynak türü için kaynak kümesi) kullanır.

Takma ad kaynakları oluşturma

Birden fazla cihaz yapılandırmasında kullanmak istediğiniz ancak varsayılan kaynak olarak sağlamak istemediğiniz bir kaynağınız varsa aynı kaynağı birden fazla alternatif kaynak dizinine yerleştirmeniz gerekmez. Bunun yerine, varsayılan kaynak dizininize kaydedilen bir kaynağın diğer adı olarak işlev gören alternatif bir kaynak oluşturabilirsiniz.

Örneğin, icon.png uygulama simgenizin olduğunu ve farklı yerel ayarlar için bu simgenin benzersiz bir sürümüne ihtiyacınız olduğunu düşünelim. Ancak iki yerel ayar (Kanada İngilizcesi ve Kanada Fransızcası) aynı sürümü kullanmalıdır. Aynı resmi hem İngilizce-Kanada hem de Fransızca-Kanada için kaynak dizinine kopyalamanız gerekmez. Bunun yerine, her ikisi için de kullanılan resmi icon.png dışında herhangi bir adla (ör. icon_ca.png) kaydedip varsayılan res/drawable/ dizinine yerleştirebilirsiniz. Ardından, res/drawable-en-rCA/ ve res/drawable-fr-rCA/ içinde <bitmap> öğesini kullanarak icon_ca.png kaynağına referans veren bir icon.xml dosyası oluşturun. Bu sayede, PNG dosyasının yalnızca bir sürümünü ve dosyaya işaret eden iki küçük XML dosyasını saklayabilirsiniz. Ayrıntılar için aşağıdaki bölümlerdeki örneklere bakın.

Çekilebilir

Mevcut bir çizilebilir öğe için takma ad oluşturmak üzere <drawable> öğesini kullanın:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

Bu dosyayı res/values-en-rCA/ gibi alternatif bir kaynak dizininde icon.xml olarak kaydederseniz R.drawable.icon olarak başvurabileceğiniz bir kaynakta derlenir ancak aslında res/drawable/'e kaydedilen R.drawable.icon_ca kaynağının bir diğer adıdır.

Düzen

Mevcut bir düzene takma ad oluşturmak için <include> öğesini kullanın. Bu öğe <merge> içine yerleştirilir:

<?xml version="1.0" encoding="utf-8"?>
<merge>
  <include layout="@layout/main_ltr"/>
</merge>

Bu dosyayı main.xml olarak kaydederseniz R.layout.main olarak başvurabileceğiniz bir kaynakta derlenir ancak aslında R.layout.main_ltr kaynağının diğer adıdır.

Uygulama kaynaklarınıza erişme

Uygulamanızda bir kaynak sağladıktan sonra, kaynak kimliğini referans vererek bu kaynağı uygulayabilirsiniz. Tüm kaynak kimlikleri, projenizin R sınıfında tanımlanır. Bu sınıf, aapt aracı tarafından otomatik olarak oluşturulur.

Uygulamanız derlendiğinde aapt, res/ dizininizdeki tüm kaynakların kaynak kimliklerini içeren R sınıfını oluşturur. Her kaynak türü için bir R alt sınıfı vardır. Örneğin, tüm çizilebilir kaynaklar için R.drawable alt sınıfı kullanılır. Bu türdeki her kaynak için statik bir tam sayı vardır. Örneğin, R.drawable.icon. Bu tam sayı, kaynağınızı almak için kullanabileceğiniz kaynak kimliğidir.

Kaynak kimlikleri R sınıfında belirtilse de kaynak kimliği bulmak için bu sınıfa bakmanız gerekmez. Kaynak kimliği her zaman aşağıdakilerden oluşur:

  • Kaynak türü: Her kaynak, string, drawable ve layout gibi bir "tür" içinde gruplandırılır. Farklı türler hakkında daha fazla bilgi için Kaynak türlerine genel bakış başlıklı makaleyi inceleyin.
  • Uzantı hariç dosya adı veya kaynak basit bir değerse (ör. dize) XML android:name özelliğindeki değer olan kaynak adı.

Bir kaynağa erişmenin iki yolu vardır:

  • Kodda: R sınıfınızın bir alt sınıfından statik bir tam sayı kullanma. Örneğin: R.string.hello string kaynak türü, hello ise kaynak adıdır. Bu biçimde bir kaynak kimliği sağladığınızda kaynaklarınıza erişebilen birçok Android API'si vardır. Daha fazla bilgi için Kodda kaynaklara erişme bölümüne bakın.
  • XML'de: R sınıfınızda tanımlanan kaynak kimliğine karşılık gelen özel bir XML söz dizimi kullanılarak. Örneğin: @string/hello string kaynak türü, hello ise kaynak adıdır. Bu söz dizimini, bir kaynakta sağladığınız bir değerin beklendiği her yerde XML kaynağında kullanabilirsiniz. Daha fazla bilgi için XML'den kaynaklara erişme bölümüne bakın.

Kodda kaynaklara erişme

Kaynak kimliğini yöntem parametresi olarak ileterek kodu bir kaynakta kullanabilirsiniz. Örneğin, setImageResource kullanarak res/drawable/myimage.png kaynağını kullanmak için bir ImageView ayarlayabilirsiniz:

Kotlin

val imageView = findViewById(R.id.myimageview) as ImageView
imageView.setImageResource(R.drawable.myimage)

Java

ImageView imageView = (ImageView) findViewById(R.id.myimageview);

imageView.setImageResource(R.drawable.myimage);

Ayrıca, Resources içindeki yöntemleri kullanarak tek tek kaynakları da alabilirsiniz. Bu yöntemlerin örneğini getResources ile alabilirsiniz.

Söz dizimi

Kodda bir kaynağa referans vermek için kullanılan söz dizimi:

[<package_name>.]R.<resource_type>.<resource_name>

  • <package_name>, kaynağın bulunduğu paketin adıdır (kendi paketinizdeki kaynaklara referans verirken gerekli değildir).
  • <resource_type>, kaynak türü için R alt sınıfıdır.
  • <resource_name>, uzantısız kaynak dosya adı veya basit değerler için XML öğesindeki android:name özelliği değeridir.

Kullanım alanları

Kaynak kimliği parametresini kabul eden birçok yöntem vardır ve Resources içindeki yöntemleri kullanarak kaynakları alabilirsiniz. Context.getResources kullanarak Resources örneğini alabilirsiniz.

Kodda kaynaklara erişme örnekleri:

Kotlin

// Load a background for the current screen from a drawable resource.
window.setBackgroundDrawableResource(R.drawable.my_background_image)

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
window.setTitle(resources.getText(R.string.main_title))

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen)

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in))

// Set the text on a TextView object using a resource ID.
val msgTextView = findViewById(R.id.msg) as TextView
msgTextView.setText(R.string.hello_message)

Java

// Load a background for the current screen from a drawable resource.
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID.
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

XML'den kaynaklara erişme

Bazı XML özellikleri ve öğeleri için mevcut bir kaynağa referans vererek değerler tanımlayabilirsiniz. Bu işlemi genellikle düzen dosyaları oluştururken widget'larınız için dizeler ve resimler sağlamak amacıyla yaparsınız.

Örneğin, düzeninize bir Button ekliyorsanız düğme metni için dize kaynağı kullanın:

<Button
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/submit" />

Söz dizimi

Bir XML kaynağında kaynağa referans vermeyle ilgili söz dizimini aşağıda bulabilirsiniz:

@[<package_name>:]<resource_type>/<resource_name>

  • <package_name>, kaynağın bulunduğu paketin adıdır (aynı paketteki kaynaklara referans verilirken gerekli değildir).
  • <resource_type>, kaynak türü için R alt sınıfıdır.
  • <resource_name>, uzantısız kaynak dosya adı veya basit değerler için XML öğesindeki android:name özelliği değeridir.

Kullanım alanları

Bazı durumlarda, XML'de bir değer için kaynak kullanmanız gerekir. Örneğin, bir widget'a çekilebilir resim uygulamak için. Ancak XML'de basit bir değerin kabul edildiği her yerde kaynak da kullanabilirsiniz. Örneğin, renk kaynağı ve dize kaynağı içeren aşağıdaki kaynak dosyanız varsa:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="opaque_red">#f00</color>
  <string name="hello">Hello!</string>
</resources>

Metin rengini ve metin dizesini ayarlamak için bu kaynakları aşağıdaki düzen dosyasında kullanabilirsiniz:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@color/opaque_red"
  android:text="@string/hello" />

Bu durumda, kaynaklar kendi paketinizden olduğu için kaynak referansında paket adını belirtmeniz gerekmez. Bir sistem kaynağına referans vermek için aşağıdaki örnekte gösterildiği gibi paket adını eklemeniz gerekir:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@android:color/secondary_text_dark"
  android:text="@string/hello" />

Takma ad oluşturmak için XML'deki kaynakları bile kullanabilirsiniz. Örneğin, başka bir çizilebilir kaynağın takma adı olan bir çizilebilir kaynak oluşturabilirsiniz:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
  android:src="@drawable/other_drawable" />

Bu kulağa gereksiz gibi gelse de alternatif kaynak kullanırken çok faydalı olabilir. Daha fazla bilgi için takma ad kaynakları oluşturma bölümüne bakın.

Referans stil özellikleri

Stil özelliği kaynağı, şu anda uygulanan temadaki bir özelliğin değerine referans vermenizi sağlar. Stil özelliğine referans vermek, sabit kodlu bir değer sağlamak yerine mevcut tema tarafından sağlanan standart varyasyonlarla eşleşecek şekilde stil vererek kullanıcı arayüzü öğelerinin görünümünü özelleştirmenize olanak tanır. Bir stil özelliğine referans vermek temelde "Mevcut temada bu özellik tarafından tanımlanan stili kullan" anlamına gelir.

Stil özelliğine referans vermek için ad söz dizimi normal kaynak biçimiyle neredeyse aynıdır ancak "at" simgesi (@) yerine soru işareti (?) kullanılır. Kaynak türü kısmı isteğe bağlıdır. Bu nedenle, referans söz dizimi aşağıdaki gibidir:

?[<package_name>:][<resource_type>/]<resource_name>

Örneğin, metin rengini sistem temasının ikincil metin rengiyle eşleşecek şekilde ayarlamak için bir özelliğe şu şekilde referans verebilirsiniz:

<EditText id="text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:textColor="?android:textColorSecondary"
  android:text="@string/hello_world" />

Burada android:textColor özelliği, geçerli temadaki bir stil özelliğinin adını belirtir. Android artık bu widget'ta android:textColorSecondary stil özelliğine uygulanan değeri android:textColor değeri olarak kullanıyor. Sistem kaynağı aracı, bu bağlamda bir özellik kaynağı beklendiğini bildiğinden türü (?android:attr/textColorSecondary) açıkça belirtmeniz gerekmez. attr türünü hariç tutabilirsiniz.

Orijinal dosyalara erişme

Nadiren de olsa orijinal dosyalarınıza ve dizinlerinize erişmeniz gerekebilir. Bu durumda, res/'daki dosyalarınızı kaydetmek işe yaramaz. Çünkü res/'daki bir kaynağı okumanın tek yolu kaynak kimliğini kullanmaktır. Bunun yerine, kaynaklarınızı assets/ dizinine kaydedebilirsiniz.

assets/ dizinine kaydedilen dosyalara kaynak kimliği verilmez. Bu nedenle, bu dosyalara R sınıfı veya XML kaynakları üzerinden başvuramazsınız. Bunun yerine, assets/ dizinindeki dosyaları normal bir dosya sistemi gibi sorgulayabilir ve AssetManager kullanarak ham verileri okuyabilirsiniz.

Ancak tek ihtiyacınız ham verileri (ör. video veya ses dosyası) okuma özelliği ise dosyayı res/raw/ dizinine kaydedin ve openRawResource kullanarak bir bayt akışı okuyun.

Platform kaynaklarına erişim

Android; stiller, temalar ve düzenler gibi bir dizi standart kaynak içerir. Bu kaynaklara erişmek için kaynak referansınızı android paket adıyla nitelendirin. Örneğin, Android, ListAdapter içindeki liste öğeleri için kullanabileceğiniz bir düzen kaynağı sağlar:

Kotlin

listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)

Java

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

Bu örnekte simple_list_item_1, ListView içindeki öğeler için platform tarafından tanımlanan bir düzen kaynağıdır. Liste öğeleri için kendi düzeninizi oluşturmak yerine bunu kullanabilirsiniz.

Kaynaklarla en iyi cihaz uyumluluğunu sağlama

Uygulamanızın birden fazla cihaz yapılandırmasını desteklemesi için, uygulamanızın kullandığı her kaynak türü için her zaman varsayılan kaynaklar sağlamanız çok önemlidir.

Örneğin, uygulamanız birden fazla dili destekliyorsa her zaman values/ bir dizin (dizelerinizin kaydedildiği) dil ve bölge niteleyicisi olmadan ekleyin. Bunun yerine tüm dize dosyalarınızı dil ve bölge niteleyicisi olan dizinlere yerleştirirseniz uygulamanız, dizelerinizin desteklemediği bir dile ayarlanmış cihazda çalıştırıldığında kilitlenir.

Varsayılan values/ kaynakları sağladığınız sürece, uygulamanız kullanıcının dili anlamaması durumunda bile düzgün şekilde çalışır. Kilitlenmekten daha iyidir.

Benzer şekilde, ekran yönüne göre farklı düzen kaynakları sağlıyorsanız bir yönü varsayılan olarak seçin. Örneğin, yatay için layout-land/ ve dikey için layout-port/ düzen kaynakları sağlamak yerine birini varsayılan olarak bırakın (ör. yatay için layout/ ve dikey için layout-port/).

Varsayılan kaynaklar sağlamak yalnızca uygulamanızın tahmin etmediğiniz bir yapılandırmada çalışabilmesi için değil, aynı zamanda Android'in yeni sürümlerinde bazen daha eski sürümlerin desteklemediği yapılandırma niteleyicileri eklendiği için de önemlidir. Yeni bir kaynak niteleyici kullanır ancak Android'in daha eski sürümleriyle kod uyumluluğunu korursanız Android'in daha eski bir sürümü uygulamanızı çalıştırdığında varsayılan kaynaklar sağlamadığınız için uygulama çöker. Bunun nedeni, yeni niteleyiciyle adlandırılan kaynakları kullanamamasıdır.

Örneğin, minSdkVersion değeriniz 4 olarak ayarlanmışsa ve tüm çizilebilir kaynaklarınızı gece modu (API düzeyi 8'de eklenen night veya notnight) kullanarak nitelendiriyorsanız API düzeyi 4 olan bir cihaz, çizilebilir kaynaklarınıza erişemez ve kilitlenir. Bu durumda, varsayılan kaynaklarınızın notnight olmasını istersiniz. Bu nedenle, bu niteleyiciyi hariç tutun ve çizilebilir kaynaklarınızı drawable/ veya drawable-night/ içine yerleştirin.

Kısacası, en iyi cihaz uyumluluğunu sağlamak için uygulamanızın düzgün çalışması için gereken kaynaklar için her zaman varsayılan kaynaklar sağlayın. Ardından, yapılandırma niteleyicilerini kullanarak belirli cihaz yapılandırmaları için alternatif kaynaklar oluşturun.

Bu kuralın bir istisnası vardır: Uygulamanızın minSdkVersion değeri 4 veya daha yüksekse ekran yoğunluğu niteleyicisiyle alternatif çizilebilir kaynaklar sağladığınızda varsayılan çizilebilir kaynaklara ihtiyacınız yoktur. Android, varsayılan çizilebilir kaynaklar olmasa bile alternatif ekran yoğunlukları arasında en iyi eşleşmeyi bulabilir ve gerektiğinde bit eşlemleri ölçeklendirebilir. Ancak tüm cihaz türlerinde en iyi deneyimi sunmak için üç yoğunluk türünün tümü için alternatif çizilebilir öğeler sağlayın.