Artık biri Android 3.0 ve diğeri platformun önceki sürümleri için olmak üzere iki TabHelper
ve CompatTab
uygulamanız olduğuna göre, şimdi bu uygulamalarla bir şeyler yapabilirsiniz. Bu derste, bu uygulamalar arasında geçiş yapma mantığının oluşturulması, sürüme duyarlı düzenler oluşturma ve son olarak geriye uyumlu kullanıcı arayüzü bileşenini kullanma konuları ele alınmaktadır.
Geçiş mantığını ekleme
TabHelper
soyut sınıfı, geçerli 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
Sonraki adım, etkinliğiniz için iki sekme uygulamasını destekleyebilecek düzenler sağlamaktır. Eski uygulama için (TabHelperEclair
) etkinlik düzeninizin, sekme içerikleri için bir kapsayıcıyla birlikte TabWidget
ve TabHost
öğelerini 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>
Sekme göstergeleri ActionBar
tarafından sağlandığından, TabHelperHoneycomb
uygulaması için sekme içeriğini içerecek bir FrameLayout
öğesine ihtiyacınız vardır:
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" />
Çalışma zamanında, platform sürümüne bağlı olarak Android, main.xml
düzeninin hangi sürümünün artırılacağına karar verir. Hangi TabHelper
uygulamasının kullanılacağını belirlemek için önceki bölümde gösterilen mantığın aynısıdır.
Etkinliğinizde TabHelper'ı kullanma
Etkinliğinizin onCreate()
yönteminde bir TabHelper
nesnesi edinebilir ve aşağıdaki kodla 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); }
Bu kod, uygulamayı çalıştırırken doğru etkinlik düzenini genişletir ve TabHelperHoneycomb
veya TabHelperEclair
nesnesini somutlaştırır. Gerçekte kullanılan somut sınıf, ortak TabHelper
arayüzünü paylaştığından etkinlik için opaktır.
Aşağıda, Android 2.3 ve Android 4.0 cihazlarda çalışan bu uygulamanın iki ekran görüntüsü verilmiştir.