والآن بعد أن أصبح لديك عمليتَا تنفيذ لكل من TabHelper
وCompatTab
، أحدهما لنظام التشغيل Android 3.0 أو إصدار أحدث والآخر للإصدارات السابقة من النظام الأساسي، حان الوقت لتنفيذ إحدى هاتين الطريقتين. يناقش هذا الدرس إنشاء المنطق للتبديل بين طرق التنفيذ هذه، وإنشاء تخطيطات تدرك الإصدار، وأخيرًا استخدام مكون واجهة المستخدم المتوافق مع الأنظمة القديمة.
إضافة منطق التبديل
تعمل فئة TabHelper
المجرّدة كعامل تشغيلي لإنشاء نسخ TabHelper
وCompatTab
مناسبة للإصدار المناسب، وذلك استنادًا إلى إصدار النظام الأساسي للجهاز الحالي:
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); } } ... }
إنشاء تنسيق نشاط مدرك للإصدار
الخطوة التالية هي توفير تخطيطات لنشاطك يمكن أن تدعم تنفيذ علامتي التبويب. بالنسبة إلى عملية التنفيذ القديمة (TabHelperEclair
)، عليك التأكّد من أنّ تنسيق نشاطك يحتوي على TabWidget
وTabHost
، إلى جانب حاوية لمحتويات علامة التبويب:
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
، كل ما تحتاج إليه هو FrameLayout
لكي تتضمّن محتوى علامة التبويب، وذلك لأنّ ActionBar
هي مؤشرات علامات التبويب التي تم توفيرها:
res/format-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 إصدار تنسيق main.xml
الذي سيتم تضخيمه بناءً على إصدار النظام الأساسي. هذا هو المنطق نفسه الموضّح في القسم السابق لتحديد عملية تنفيذ TabHelper
التي يجب استخدامها.
استخدام TabHelper في نشاطك
في طريقة "onCreate()
" لنشاطك، يمكنك الحصول على عنصر TabHelper
وإضافة علامات تبويب باستخدام الرمز التالي:
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); }
عند تشغيل التطبيق، يعمل هذا الرمز على تضخيم تنسيق النشاط الصحيح وإنشاء مثيل لكائن TabHelperHoneycomb
أو TabHelperEclair
. الفئة المحددة المستخدمة غير واضحة للنشاط، حيث إنها تشترك في واجهة TabHelper
المشتركة.
في ما يلي لقطتا شاشة لعملية التنفيذ هذه على أجهزة Android 2.3 وAndroid 4.0.
![لقطة شاشة لمثال لعلامات التبويب التي تعمل على جهاز Android 2.3 (باستخدام TabHelperEclair).](https://developer.android.google.cn/static/images/training/backward-compatible-ui-gb.png?authuser=8&hl=ar)
![لقطات شاشة لمثال لعلامات التبويب التي تعمل على جهاز Android 4.0 (باستخدام TabHelperHoneycomb).](https://developer.android.google.cn/static/images/training/backward-compatible-ui-ics.png?authuser=8&hl=ar)
الشكل 1. لقطات شاشة لأمثلة على علامات التبويب المتوافقة مع الأنظمة القديمة التي تعمل على جهاز Android 2.3 (باستخدام TabHelperEclair
) وجهاز Android 4.0 (باستخدام TabHelperHoneycomb
)