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ü |
|
|
Özellik animasyonlarını tanımlayan XML dosyaları. |
|
|
Ara animasyonları tanımlayan XML dosyaları. Özellik animasyonları da bu dizine kaydedilebilir ancak iki türü ayırt etmek için özellik animasyonlarında |
|
|
Renklerin durum listesini tanımlayan XML dosyaları. Daha fazla bilgi için Renk durumu listesi kaynağı başlıklı makaleyi inceleyin. |
|
|
Aşağıdaki drawable kaynak alt türlerinde derlenen bit eşlem dosyaları (PNG, .
Daha fazla bilgi için Çizilebilir kaynaklar başlıklı makaleyi inceleyin. |
|
|
Farklı başlatıcı simgesi yoğunlukları için çizilebilir dosyalar. Başlatıcı simgelerini |
|
|
Kullanıcı arayüzü düzenini tanımlayan XML dosyaları. Daha fazla bilgi için Düzen kaynağı başlıklı makaleyi inceleyin. |
|
|
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. |
|
|
Ham biçiminde kaydedilecek rastgele dosyalar. Bu kaynakları ham Ancak orijinal dosya adlarına ve dosya hiyerarşisine erişmeniz gerekiyorsa kaynakları |
|
|
Dizeler, tam sayılar ve renkler gibi basit değerler içeren XML dosyaları. Diğer 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. |
|
|
Çalışma zamanında |
|
|
TTF, OTF veya TTC gibi uzantılara sahip yazı tipi dosyaları ya da |
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:
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.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:
|
Mobil ülke kodu (MCC), isteğe bağlı olarak cihazdaki SIM kartın mobil ağ kodu (MNC) ile birlikte. Örneğin, 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ı |
Dil, yazı sistemi (isteğe bağlı) ve bölge (isteğe bağlı) |
Örnekler:
|
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 Kodlar büyük/küçük harfe duyarlı değildir. Bölge kısmını ayırt etmek için 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 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 |
| Dil bilgisine uygun cinsiyet | masculinefeminineneuter |
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:
Android'de Dil Bilgisi Çekimi başlıklı makaleyi inceleyin. Dilbilgisel cinsiyeti belirten API düzeyi 34'te eklendi. |
Düzen yönü |
|
Uygulamanızın düzen yönü. 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:
Not: Uygulamanızda sağdan sola düzen özelliklerini etkinleştirmek için API düzeyi 17'de eklendi. |
En küçük genişlik |
Örnekler:
vb. |
Bir uygulamanın kullanabileceği ekran alanının en kısa boyutu. Özellikle, uygulama penceresinin Ö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ı 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:
Uygulamanız, API düzeyi 13'te eklendi. Ayrıca, uygulamanızın uyumlu olduğu minimum 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 |
Örnekler:
vb. |
Kaynağın kullanıldığı minimum kullanılabilir ekran genişliğini veya yüksekliğini ( 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 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 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 |
|
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ı API düzeyi 4'te eklenmiştir. Ekranın küçük, normal veya büyük olduğunu belirten Daha fazla bilgi için Ekran uyumluluğuna genel bakış başlıklı makaleyi inceleyin. |
Ekran en-boy oranı |
|
API düzeyi 4'te eklenmiştir. Bu tamamen ekranın en boy oranına bağlıdır ( Ekranın uzun olup olmadığını belirten |
Yuvarlak ekran |
|
API düzeyi 23'te eklenmiştir. Ekranın yuvarlak olup olmadığını gösteren |
Wide Color Gamut |
|
API düzeyi 26'da eklendi. Ekranın geniş renk gamına sahip olup olmadığını gösteren |
Yüksek Dinamik Aralık (HDR) |
|
API düzeyi 26'da eklendi. Ekranın HDR özelliklerine sahip olup olmadığını belirten |
Ekran yönlendirme |
|
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 |
Kullanıcı arayüzü modu |
|
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ı |
Gece modu |
|
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 |
Ekran piksel yoğunluğu (dpi) |
|
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ü |
|
Cihazdaki dokunmatik ekranın türünü belirten |
Klavye kullanılabilirliği |
|
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 |
Birincil metin giriş yöntemi |
|
Ayrıca, kullanılabilen birincil metin giriş yöntemini belirten |
Gezinme tuşunun kullanılabilirliği |
|
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 |
Birincil dokunmatik olmayan gezinme yöntemi |
|
Ayrıca, mevcut gezinme yönteminin türünü belirten |
Platform sürümü (API düzeyi) |
Örnekler:
vb. |
Cihazın desteklediği API düzeyi. Örneğin, |
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/
- Yanlış:
- 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çerendrawable-es/vedrawable-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, drawablevelayoutgibi 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:
Rsınıfınızın bir alt sınıfından statik bir tam sayı kullanma. Örneğin:R.string.hellostringkaynak türü,helloise 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:
Rsınıfınızda tanımlanan kaynak kimliğine karşılık gelen özel bir XML söz dizimi kullanılarak. Örneğin:@string/hellostringkaynak türü,helloise 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çinRalt sınıfıdır.<resource_name>, uzantısız kaynak dosya adı veya basit değerler için XML öğesindekiandroid: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çinRalt sınıfıdır.<resource_name>, uzantısız kaynak dosya adı veya basit değerler için XML öğesindekiandroid: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.