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 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. Yeni Android API'leri söz konusu olduğunda, yeni cihazlarda mevcut API'leri kullanan ve eski cihazlarda daha uyumlu eski API'lere yedek olarak başvuran sürüm bilinçli bileşenler oluşturmak için soyutlama kullanabilirsiniz.
Bu yaklaşımı kullanırken önce geriye dönük uyumlu bir şekilde kullanmak istediğiniz yeni sınıfları belirler, ardından yeni sınıfların herkese açık arayüzlerine göre soyut sınıflar oluşturursunuz. Soyutlama arayüzlerini tanımlarken mümkün olduğunca yeni API'yi 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ş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 gereksinimleriniz olduğunu 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.
Sekmelerle ilgili temel API'ler ActionBar
ve ActionBar.Tab
'te bulunur. Bunlar, sekmelerinizi sürüm bilinir hale getirmek için soyutlanabilen API'lerdir. Bu örnek projenin şartları, Honeycomb'daki (API düzeyi 11) yeni sekme özelliklerinden yararlanırken Eclair'e (API düzeyi 5) kadar geriye dönük uyumluluk gerektirir. Bu iki uygulamayı ve bunların soyut temel sınıflarını (veya arayüzlerini) destekleyen sınıf yapısının şeması aşağıda gösterilmiştir.
Soyut İşlem Çubuğu.Sekme
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(); ... }
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
Ardından, bir etkinliğe sekme oluşturmanıza ve eklemenize olanak tanıyan soyut bir sınıf tanımlayın (ActionBar.newTab()
ve ActionBar.addTab()
gibi):
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.