Uygulamanızda üst düzey gezinmenin birincil 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 cihazlara dağıtmak isterseniz hem yeni API'yi destekleyen bir uygulama sağlamanız hem de eski API'leri kullanan bir yedek mekanizması sağlamanız gerekir.
Bu sınıfta, geriye dönük uyumluluk sağlamak için sürüme özgü uygulamalara sahip soyut sınıflar kullanan, sekmeli bir kullanıcı arayüzü bileşeni derleyeceksiniz. Bu derste, sekme bileşenini oluşturma yolunda ilk adım olarak yeni sekme API'ları için bir soyutlama katmanının nasıl oluşturulacağı açıklanmaktadır.
Özetlemeye hazırlanın
Java programlama dilindeki 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. Yeni Android API'lerinde, soyutlamadan yararlanarak yeni cihazlarda mevcut API'leri kullanan sürüme duyarlı bileşenler oluşturabilir ve eski cihazlarda ise eski ve daha uyumlu API'leri kullanabilirsiniz.
Bu yaklaşımı kullanırken önce hangi yeni sınıfları geriye dönük uyumlu şekilde kullanmak istediğinizi belirler, ardından yeni sınıfların herkese açık arayüzlerini temel alarak soyut sınıflar oluşturursunuz. Soyutlama arayüzlerini tanımlarken yeni API'yi mümkün olduğunca yansıtmanız gerekir. 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şturduktan sonra çalışma zamanında istenilen sayıda uygulama oluşturulabilir ve seçilebilir. Geriye dönük uyumluluk açısından bu uygulamalar gerekli API düzeyine göre değişiklik gösterebilir. Bu nedenle, bir uygulama yakın zamanda kullanıma sunulan API'leri kullanırken diğerleri daha eski API'leri kullanabilir.
Soyut bir sekme arayüzü oluşturma
Sekmelerin geriye dönük uyumlu sürümlerini 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 sekmelerinde aşağıdaki işlevsel şartlara sahip olduğunuzu varsayalım:
- Sekme göstergelerinde bir metin ve simge gösterilmelidir.
- Sekmeler, bir parça örneğiyle ilişkilendirilebilir.
- Etkinlik, sekme değişikliklerini dinleyebilir.
Bu koşulları önceden hazırlamak, soyutlama katmanınızın kapsamını kontrol etmenize olanak tanır. Bu, soyutlama katmanınızın birden fazla uygulamasını oluşturmak için daha az zaman harcayabileceğiniz ve geriye dönük uyumlu yeni uygulamanızı daha kısa sürede kullanmaya başlayabileceğiniz anlamına gelir.
Sekmeler için temel API'ler ActionBar
ve ActionBar.Tab
içindedir. Bunlar, sekmelerinizi sürüme duyarlı hale getirmek için soyutlanacak API'lerdir. Bu örnek projenin şartları, Honeycomb'daki (API Düzeyi 11) yeni sekme özelliklerinden yararlanırken tekrar Eclair'e (API düzeyi 5) uyumluluk gerektirir. Bu iki uygulamayı ve bunların soyut temel sınıflarını (veya arayüzlerini) destekleyecek sınıf yapısının diyagramı aşağıda gösterilmiştir.
Soyut İşlem Çubuğu.Sekme
Bir sekmeyi temsil eden ve ActionBar.Tab
arayüzünü yansıtan 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(); ... }
Sekme nesnelerinin etkinliklerle (kod snippet'inde gösterilmeyen) ilişkilendirilmesi gibi yaygın özelliklerin uygulanmasını basitleştirmek için buradaki arayüz yerine soyut bir sınıf kullanabilirsiniz.
Soyut ActionBar sekme yöntemleri
Daha sonra, ActionBar.newTab()
ve ActionBar.addTab()
gibi bir etkinlikte sekme oluşturup eklemenize olanak tanıyan soyut bir 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 TabHelper
ve CompatTab
için hem eski hem de yeni platform sürümlerinde çalışan uygulamalar oluşturacaksınız.