res içinde dizeleri, drawable'ları ve stilleri nasıl organize edip bağlayabilirsiniz

Kerem Aydın·7 Temmuz 2026·⏱3 dk

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çin plurals (<plurals name="items">), farklı diller için values-ru/, values-en/ gibi klasörler kullanın.
  • Renkler ve boyutlar: res/values/colors.xml, res/values/dimens.xml. @color/primary ve @dimen/margin_small gibi 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 şekilde drawable/ + vektörel (.xml) dosyalar. Başlatıcı simgeleri için mipmap-*/ kullanın.
  • Diğerleri: Medya/dosyalar için res/raw/, yapılandırmalar (örneğin preferences.xml) için res/xml/, serbest dosyalar için assets/.

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çin app:srcCompat="@drawable/ic_logo"
    • Stil: style="@style/MyButton" veya tema: android:theme="@style/MyTheme"
  • 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ı: ContextThemeWrapper kullanın veya obtainStyledAttributes ile öznitelikleri alın.
  • Temalar ve öznitelikler: Tema değişimini sağlamak için stillerde ?attr/colorPrimary gibi ö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_case ve ön ekler kullanın (btn_submit, ic_user, bg_header).
  • Yerelleştirme: Tüm metin kaynaklarını strings.xml içine koyun, plurals kullanın ve yerel ayar değiştirmeyi test edin.
  • Temaları ayırma: Genel öznitelikleri themes.xml içinde, bileşenlere özel stilleri styles.xml iç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çin values-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 mipmap yerine drawable iç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 plurals kullanmamak — dillerde yanlış çoğul ekleri.

SSS

  • S: drawable yerine ne zaman mipmap kullanmalı?
    C: Başlatıcı simgeleri için mipmap tercih 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 zaman strings.xml kullanın.
  • S: Kaynaklar için koyu temayı nasıl desteklerim?
    C: Renkler ve stiller için values-night/ veya görseller için drawable-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.