Artık TabHelper ve CompatTab için iki uygulamanız var (biri Android 3.0 ve sonraki sürümler, diğeri ise platformun önceki sürümleri için). Şimdi bu uygulamalarla bir şeyler yapma zamanı. Bu derste, bu uygulamalar arasında geçiş yapma mantığını oluşturma, sürüme duyarlı düzenler oluşturma ve son olarak geriye dönük uyumlu kullanıcı arayüzü bileşenini kullanma konuları ele alınmaktadır.
Geçiş mantığını ekleme
TabHelper abstract sınıfı, mevcut cihazın platform sürümüne göre sürüme uygun TabHelper ve CompatTab örnekleri oluşturmak için fabrika görevi görür:
Kotlin
sealed class TabHelper(protected val mActivity: FragmentActivity, protected val tag: String) { abstract fun setUp() abstract fun addTab(tab: CompatTab) // Usage is tabHelper.newTab("tag") fun newTab(tag: String): CompatTab = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { CompatTabHoneycomb(mActivity, tag) } else { CompatTabEclair(mActivity, tag) } companion object { // Usage is TabHelper.createInstance(activity) fun createInstance(activity: FragmentActivity): TabHelper = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { TabHelperHoneycomb(activity) } else { TabHelperEclair(activity) } } }
Java
public abstract class TabHelper { ... // Usage is TabHelper.createInstance(activity) public static TabHelper createInstance(FragmentActivity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { return new TabHelperHoneycomb(activity); } else { return new TabHelperEclair(activity); } } // Usage is tabHelper.newTab("tag") public CompatTab newTab(String tag) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { return new CompatTabHoneycomb(mActivity, tag); } else { return new CompatTabEclair(mActivity, tag); } } ... }
Sürüme duyarlı etkinlik düzeni oluşturma
Bir sonraki adım, etkinliğiniz için iki sekme uygulamasını destekleyebilecek düzenler sağlamaktır. Eski uygulama (TabHelperEclair) için etkinlik düzeninizin, sekme içerikleri için bir kapsayıcıyla birlikte TabWidget ve TabHost içerdiğinden emin olmanız gerekir:
res/layout/main.xml:
<!-- This layout is for API level 5-10 only. --> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> </TabHost>
TabHelperHoneycomb uygulaması için sekme göstergeleri ActionBar tarafından sağlandığından sekme içeriklerini barındıracak bir FrameLayout yeterlidir:
res/layout-v11/main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" />
Android, çalışma zamanında platform sürümüne bağlı olarak main.xml düzeninin hangi sürümünün genişletileceğine karar verir. Bu, hangi TabHelper uygulamasının kullanılacağını belirlemek için önceki bölümde gösterilen mantıkla aynıdır.
Etkinliğinizde TabHelper'ı kullanma
Etkinliğinizin onCreate() yönteminde bir TabHelper nesnesi elde edebilir ve aşağıdaki kodu kullanarak sekmeler ekleyebilirsiniz:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... setContentView(R.layout.main) TabHelper.createInstance(this).apply { setUp() newTab("photos") .setText(R.string.tab_photos) .also { photosTab -> addTab(photosTab) } newTab("videos") .setText(R.string.tab_videos) .also { videosTab -> addTab(videosTab) } } }
Java
@Override public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); TabHelper tabHelper = TabHelper.createInstance(this); tabHelper.setUp(); CompatTab photosTab = tabHelper .newTab("photos") .setText(R.string.tab_photos); tabHelper.addTab(photosTab); CompatTab videosTab = tabHelper .newTab("videos") .setText(R.string.tab_videos); tabHelper.addTab(videosTab); }
Uygulama çalıştırıldığında bu kod, doğru etkinlik düzenini şişirir ve TabHelperHoneycomb veya TabHelperEclair nesnesini başlatır. Gerçekte kullanılan somut sınıf, ortak TabHelper arayüzünü paylaştıkları için etkinlik için opak olur.
Bu uygulamanın Android 2.3 ve Android 4.0 cihazlarda çalıştığını gösteren iki ekran görüntüsü aşağıda yer almaktadır.
Şekil 1. Android 2.3 cihazda (TabHelperEclair kullanılarak) ve Android 4.0 cihazda (TabHelperHoneycomb kullanılarak) çalışan, geriye dönük uyumlu sekmelerin örnek ekran görüntüleri.