com.android.theme ve com.android.thememanager paketleri — kısa ve öz
com.android.theme, tema altyapısından (renkler, yazı tipleri, stiller) sorumlu sistem bileşenidir; com.android.thememanager ise tema setlerini depolayan, uygulayan ve yükleyen bir servis/yöneticidir. Basitçe ifade etmek gerekirse, ilki motor, ikincisi yönetim arayüzüdür. Aşağıda bunun uygulamaları nasıl etkilediği ve geliştirmede gerçekten nelerin kullanılabileceği açıklanmaktadır.
com.android.theme nedir ve nerede etki eder
- com.android.theme genellikle bir dizi sistem servisi ve overlay mekanizması (RRO/OMS) uygular — kaynakları sistem ve kullanıcı uygulamalarına uygular.
- Davranış ve erişilebilirlik Android sürümüne ve OEM'e bağlıdır: üreticinin tema yönetimi için kendi uygulaması ve kullanıcı arayüzü olabilir.
- Etki alanı: sistem şablonları, bildirim çubuğu renkleri, sistem widget'ları ve bazen de sistem kaynakları/overlay'ler kullanılıyorsa uygulama stilleri.
Eğer sistem overlay'lerini kullanmıyorsanız, temalar genellikle kaynaklar ve değişkenler aracılığıyla desteklenmedikçe özel görünümlerinizi değiştiremez.
Uygulamada temalarla nasıl etkileşime girilir (pratik)
- Standart yol — temaları kaynaklarda tanımlamak ve uygulamak:
<!-- styles.xml -->
<style name="Theme.MyApp.Light" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">#6200EE</item>
<item name="colorOnPrimary">#FFFFFF</item>
<item name="colorAccent">#03DAC6</item>
</style>
Manifest dosyasında:
<application android:theme="@style/Theme.MyApp.Light" ...>
- Sistem ayrıcalıkları olmadan dinamik değiştirme:
- Temayı
setTheme()+recreate()ile değiştirin veya Day/Night içinAppCompatDelegate.setDefaultNightMode(...)kullanın. - Sistem ThemeManager'a güvenmeyin — birçok yöntemi sistem izinleriyle korunur.
- Sistem paketlerini arama ve tanılama:
- Tanılama gerekiyorsa adb üzerinden kurulu paketlere bakılabilir (cihaza erişim gerektirir).
Palet değiştirmek için semantik değişkenler (renk token'ları) kullanın ve düzenlerde sabit renkleri en aza indirin.
Kısıtlamalar, güvenlik ve OEM özellikleri
- Tema yöneticisinin birçok özelliği (global overlay yükleme) yalnızca sistem uygulamaları veya OEM tarafından imzalanmış anahtarlar aracılığıyla kullanılabilir.
- Güvenilmeyen kaynaklardan gelen üçüncü taraf temalar değiştirilmiş kaynaklar içerebilir ve kullanıcı arayüzünü/davranışı etkileyebilir — yalnızca güvenilir mağazalardan yükleyin.
- Uygulamanız sistem kaynaklarına (örneğin sistem yazı tipi veya vurgu rengi) bağımlıysa, farklı cihazlardaki olası farklılıkları göz önünde bulundurun.
Gerekli izinler olmadan sistem overlay'lerini programlı olarak yönetmeye çalışmak, çoğu cihazda reddedilmelere veya hatalı çalışmaya neden olabilir.
Arayüz geliştiricileri için öneriler
- Temayı bir dizi token olarak tasarlayın: colorPrimary, colorBackground, textColorPrimary vb.
- Day/Night desteği sağlayın ve WCAG'a göre kontrastı test edin.
- com.android.thememanager varlığına güvenmeyin — uygulama içi tema değiştirici uygulayın.
- Birden fazla OEM/Android sürümünde test edin: sistem temalarındaki farklar belirgin olabilir.
Sık yapılan hatalar
- Sistem temasının özel renkleri geçersiz kılacağını beklemek — bu genellikle gerçekleşmez.
- Token'lar yerine sabit kodlanmış renkler kullanmak.
- Sistem izinleri olmadan sistem overlay'lerini programlı olarak etkinleştirmeye çalışmak.
- Kontrast ve yazı tipi ölçeklendirmesini yeterince test etmemek.
SSS
- com.android.thememanager aracılığıyla tüm uygulamaların temalarını yönetebilir miyim?
- Hayır: bu tür yetenekler genellikle sistem servisleri ve izinlerle sınırlıdır.
- Kullanıcıya temaları nasıl güvenli bir şekilde sunabilirim?
- Uygulamada önceden tanımlanmış setler sağlayın ve Activity'yi yeniden başlatarak ayarlar aracılığıyla bunları değiştirme imkanı sunun.
- Android otomatik değiştirme (gündüz/gece) destekliyor mu?
- Evet — AppCompat ve DayNight aracılığıyla; bazı OEM'ler kendi zamanlamalarını ve duvar kağıdı bağlantısını ekler.
Gerekirse, seçimi kaydeden ve işlemi yeniden başlatmadan yumuşak geçiş sağlayan uygulama içi tema değiştirici örneği hazırlayabilirim.