Uygulamanızda birincil üst düzey gezinme biçimi olarak işlem çubuğu sekmelerini kullanmak istediğinizi varsayalım. Maalesef ActionBar API'leri yalnızca Android 3.0 veya sonraki sürümlerde (API düzeyi 11+) kullanılabilir. Bu nedenle, uygulamanızı platformun önceki sürümlerini çalıştıran cihazlarda dağıtmak istiyorsanız daha eski API'leri kullanan bir geri dönüş mekanizması sağlarken daha yeni API'yi destekleyen bir uygulama sağlamanız gerekir.
Bu derste, geriye dönük uyumluluk sağlamak için sürüme özel uygulamalarla soyut sınıflar kullanan sekmeli bir kullanıcı arayüzü (UI) bileşeni oluşturacaksınız. Bu derste, sekme bileşenini oluşturmaya yönelik ilk adım olarak yeni sekme API'leri için nasıl bir soyutlama katmanı oluşturulacağı açıklanmaktadır.
Soyutlamaya hazırlanma
Java programlama dilinde soyutlama, uygulama ayrıntılarını gizlemek için bir veya daha fazla arayüz ya da soyut sınıf oluşturmayı içerir. Daha yeni Android API'leri söz konusu olduğunda, daha yeni cihazlarda mevcut API'leri kullanan ve daha eski cihazlarda daha eski, daha uyumlu API'lere geri dönen sürüme duyarlı bileşenler oluşturmak için soyutlama kullanabilirsiniz.
Bu yaklaşımı kullanırken öncelikle geriye dönük uyumlu bir şekilde kullanmak istediğiniz yeni sınıfları belirlersiniz. Ardından, yeni sınıfların herkese açık arayüzlerini temel alarak soyut sınıflar oluşturursunuz. Özetleme arayüzlerini tanımlarken yeni API'yi mümkün olduğunca yansıtmalısınız. Bu, ileriye dönük uyumluluğu en üst düzeye çıkarır ve gelecekte artık gerekli olmadığında soyutlama katmanını bırakmayı kolaylaştırır.
Bu yeni API'ler için soyut sınıflar oluşturulduktan sonra, çalışma zamanında istenen sayıda uygulama oluşturulup seçilebilir. Geriye dönük uyumluluk amacıyla bu uygulamalar, gerekli API düzeyine göre değişiklik gösterebilir. Bu nedenle, bir uygulama yakın zamanda yayınlanan API'leri kullanabilirken diğerleri daha eski API'leri kullanabilir.
Özet sekmesi arayüzü oluşturma
Sekmelerin geriye dönük uyumlu bir sürümünü oluşturmak için öncelikle uygulamanızın hangi özelliklere ve belirli API'lere ihtiyaç duyduğunu belirlemeniz gerekir. Üst düzey bölüm sekmeleri için aşağıdaki işlevsel gereksinimlere sahip olduğunuzu varsayalım:
- Sekme göstergelerinde metin ve simge gösterilmelidir.
- Sekmeler bir parça örneğiyle ilişkilendirilebilir.
- Etkinlik, sekme değişikliklerini dinleyebilmelidir.
Bu koşulları önceden hazırlayarak soyutlama katmanınızın kapsamını kontrol edebilirsiniz. Bu sayede, soyutlama katmanınızın birden fazla uygulamasını oluşturmak için daha az zaman harcayabilir ve yeni geriye dönük uyumlu uygulamanızı daha erken kullanmaya başlayabilirsiniz.
Sekmelerle ilgili temel API'ler ActionBar ve ActionBar.Tab içinde yer alır. Sekmelerinizin sürümden bağımsız olması için soyutlanması gereken API'ler şunlardır: Bu örnek proje için, Honeycomb'daki (API düzeyi 11) yeni sekme özelliklerinden yararlanırken Eclair (API düzeyi 5) ile geriye dönük uyumluluk sağlanması gerekir. Bu iki uygulamayı ve bunların soyut temel sınıflarını (veya arayüzlerini) destekleyen sınıf yapısının diyagramı aşağıda verilmiştir.
Abstract ActionBar.Tab
ActionBar.Tab arayüzünü yansıtan bir sekmeyi temsil eden soyut bir sınıf oluşturarak sekme soyutlama katmanınızı oluşturmaya başlayın:
Kotlin
sealed class CompatTab(val tag: String) { ... abstract fun getText(): CharSequence abstract fun getIcon(): Drawable abstract fun getCallback(): CompatTabListener abstract fun getFragment(): Fragment abstract fun setText(text: String): CompatTab abstract fun setIcon(icon: Drawable): CompatTab abstract fun setCallback(callback: CompatTabListener): CompatTab abstract fun setFragment(fragment: Fragment): CompatTab ... }
Java
public abstract class CompatTab { ... public abstract CompatTab setText(int resId); public abstract CompatTab setIcon(int resId); public abstract CompatTab setTabListener( CompatTabListener callback); public abstract CompatTab setFragment(Fragment fragment); public abstract CharSequence getText(); public abstract Drawable getIcon(); public abstract CompatTabListener getCallback(); public abstract Fragment getFragment(); ... }
Burada, sekme nesnelerinin etkinliklerle ilişkilendirilmesi gibi ortak özelliklerin uygulanmasını basitleştirmek için arayüz yerine soyut bir sınıf kullanabilirsiniz (kod snippet'inde gösterilmemiştir).
Abstract ActionBar sekme yöntemleri
Ardından, ActionBar.newTab() ve ActionBar.addTab() gibi etkinliklere sekme oluşturup eklemenize olanak tanıyan bir soyut sınıf tanımlayın:
Kotlin
sealed class TabHelper(protected val activity: FragmentActivity) { ... abstract fun setUp() fun newTab(tag: String): CompatTab { // This method is implemented in a later lesson. } abstract fun addTab(tab: CompatTab) ... }
Java
public abstract class TabHelper { ... public CompatTab newTab(String tag) { // This method is implemented in a later lesson. } public abstract void addTab(CompatTab tab); ... }
Sonraki derslerde, hem eski hem de yeni platform sürümlerinde çalışan TabHelper ve CompatTab için uygulamalar oluşturacaksınız.