اکنون که دو پیادهسازی TabHelper
و CompatTab
دارید - یکی برای اندروید 3.0 به بعد و دیگری برای نسخههای قبلی پلتفرم - وقت آن است که کاری با این پیادهسازیها انجام دهید. این درس ایجاد منطق برای جابجایی بین این پیادهسازیها، ایجاد طرحبندیهای آگاه از نسخه، و در نهایت استفاده از مؤلفه رابط کاربری سازگار با عقب را مورد بحث قرار میدهد.
منطق سوئیچینگ را اضافه کنید
کلاس انتزاعی TabHelper
به عنوان یک کارخانه برای ایجاد نمونه های TabHelper
و CompatTab
مناسب نسخه، بر اساس نسخه پلتفرم دستگاه فعلی عمل می کند:
کاتلین
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) } } }
جاوا
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/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 تصمیم میگیرد که کدام نسخه از چیدمان main.xml
را بسته به نسخه پلتفرم افزایش دهد. این همان منطقی است که در بخش قبل نشان داده شد تا مشخص شود از کدام پیاده سازی TabHelper
استفاده شود.
از TabHelper در فعالیت خود استفاده کنید
در متد onCreate()
اکتیویتی خود، میتوانید یک شی TabHelper
دریافت کنید و با کد زیر برگهها را اضافه کنید:
کاتلین
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) } } }
جاوا
@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
را به اشتراک می گذارند.
در زیر دو اسکرین شات از این پیاده سازی در حال اجرا بر روی دستگاه اندروید 2.3 و اندروید 4.0 را مشاهده می کنید.
![نمونه ای از اسکرین شات برگه های در حال اجرا در دستگاه Android 2.3 (با استفاده از TabHelperEclair).](https://developer.android.com/static/images/training/backward-compatible-ui-gb.png?hl=fa)
![نمونهای از اسکرینشاتهای برگههای در حال اجرا در دستگاه Android 4.0 (با استفاده از TabHelperHoneycomb).](https://developer.android.com/static/images/training/backward-compatible-ui-ics.png?hl=fa)
شکل 1. نمونه ای از اسکرین شات های برگه های سازگار با عقب که در دستگاه Android 2.3 (با استفاده از TabHelperEclair
) و دستگاه Android 4.0 (با استفاده از TabHelperHoneycomb
) اجرا می شوند.