res içinde dizeleri, drawable'ları ve stilleri nasıl organize edip bağlayabilirsiniz
Kısa cevap: Dizeleri res/values/strings.xml içinde, görselleri res/drawable-*/ veya mipmap-*/ içinde, stilleri res/values/styles.xml içinde saklayın ve bunlara XML'de @string/..., @drawable/..., @style/... aracılığıyla ya da kodda R.string..., ContextCompat.getDrawable(...) ve R.style... aracılığıyla erişin. Evrensellik için niteleyicileri (yoğunluk, dil, gece) ve vektörel kaynakları kullanın.
Temel kaynakları nereye ve nasıl saklamalı
- Dizeler:
res/values/strings.xml. Çoğul formlar içinplurals(<plurals name="items">), farklı diller içinvalues-ru/,values-en/gibi klasörler kullanın. - Renkler ve boyutlar:
res/values/colors.xml,res/values/dimens.xml.@color/primaryve@dimen/margin_smallgibi referanslar kullanın. - Stiller ve temalar:
res/values/styles.xml. Bileşen stillerini uygulama temasından ayırın; stilleri miras alın (<style name="MyButton" parent="Widget.Material.Button">). - Görseller:
res/drawable-mdpi/,drawable-hdpi/,drawable-xhdpi/veya tutarlı bir şekildedrawable/+ vektörel (.xml) dosyalar. Başlatıcı simgeleri içinmipmap-*/kullanın. - Diğerleri: Medya/dosyalar için
res/raw/, yapılandırmalar (örneğinpreferences.xml) içinres/xml/, serbest dosyalar içinassets/.
Simgeler ve basit illüstrasyonlar için vektörel drawable'lar (VectorDrawable) kullanın; bu, dosya boyutunu azaltır ve farklı yoğunluklar için otomatik olarak ölçeklenir.
XML ve kodda kaynaklara nasıl erişilir
- XML (Düzen, Menü, Drawable):
- Metin:
android:text="@string/title" - Görsel:
android:src="@drawable/ic_logo"veya uyumluluk içinapp:srcCompat="@drawable/ic_logo" - Stil:
style="@style/MyButton"veya tema:android:theme="@style/MyTheme"
- Metin:
- Kotlin/Java'da:
- Dize:
val s = context.getString(R.string.title) - Drawable:
val d = ContextCompat.getDrawable(context, R.drawable.ic_logo) - Boyut:
val px = resources.getDimensionPixelSize(R.dimen.padding) - Stilin programatik uygulanması:
ContextThemeWrapperkullanın veyaobtainStyledAttributesile öznitelikleri alın.
- Dize:
- Temalar ve öznitelikler: Tema değişimini sağlamak için stillerde
?attr/colorPrimarygibi özniteliklere başvurun.
Android'in yeni sürümlerinde tema belirtmeden getResources().getDrawable(int) kullanmayın; tint/öznitelik nedeniyle yanlış renk döndürebilir. Bunun yerine ContextCompat.getDrawable kullanın.
En iyi uygulamalar ve proje organizasyonu
- Adlandırma: Aramayı kolaylaştırmak için
snake_caseve ön ekler kullanın (btn_submit,ic_user,bg_header). - Yerelleştirme: Tüm metin kaynaklarını
strings.xmliçine koyun,pluralskullanın ve yerel ayar değiştirmeyi test edin. - Temaları ayırma: Genel öznitelikleri
themes.xmliçinde, bileşenlere özel stilleristyles.xmliçinde saklayın. - Görsel optimizasyonu: WebP'ye dönüştürün veya vektörler kullanın; aynı PNG'lerin farklı klasörlerde yinelenmesinden kaçının.
- Kaynak niteleyicilerini kullanın: Koyu tema için
drawable-night/, tabletler içinvalues-sw600dp/vb. - Modüller ve özellik modülerizasyonu: Büyük projelerde özellik kaynaklarını ilgili modüllere taşıyın, ancak ad çakışmalarına dikkat edin.
- Derleme: Kullanılmayan kaynakları kaldırmak için kaynak küçültmeyi (
shrinkResources true) ve obfuscation'ı etkinleştirin.
Sık yapılan hatalar
- Düzen dosyalarında
@string/...yerine dizeleri sabit kodlamak. - Başlatıcı simgesini
mipmapyerinedrawableiçine koymak (sonuç: bazı başlatıcılarda simgeler yanlış ölçeklenir). - Farklı modüllerde farklı isimlerle kaynakları yinelemek — derleme sırasında çakışmalara yol açar.
- Ekran yoğunluklarını göz ardı etmek — mdpi/hdpi sürümü olmayan büyük PNG'ler.
- Öğe sayacı için
pluralskullanmamak — dillerde yanlış çoğul ekleri.
SSS
- S:
drawableyerine ne zamanmipmapkullanmalı?
C: Başlatıcı simgeleri içinmipmaptercih edilir, çünkü sistem uygulama kaynaklarından bağımsız olarak farklı yoğunlukları kullanabilir. - S: Dizeleri doğrudan kodda saklayabilir miyim?
C: Teknik olarak evet, ancak bu yerelleştirme ve test sürecini zorlaştırır; her zamanstrings.xmlkullanın. - S: Kaynaklar için koyu temayı nasıl desteklerim?
C: Renkler ve stiller içinvalues-night/veya görseller içindrawable-night/oluşturun ve tema özniteliklerini kullanın. - S: APK boyutunu kaynaklar açısından nasıl optimize ederim?
C: WebP/Vektör kullanın, Gradle'da kaynak küçültmeyi etkinleştirin ve kullanılmayan kaynakları kaldırın.
Gerekirse, kaynak adlandırma kontrol listesi veya Material 3 için styles.xml ve themes.xml yapılandırma örnekleri hazırlayabilirim.