इस लेसन में बताया गया है कि एपीआई का नया वर्शन, पुराने डिवाइसों के साथ कैसे काम करता है.
कोई दूसरा विकल्प चुनना
यूज़र इंटरफ़ेस (यूआई) की नई सुविधाओं को पुराने वर्शन के साथ काम करने वाले तरीके से इस्तेमाल करने में सबसे मुश्किल काम, पुराने प्लैटफ़ॉर्म वर्शन के लिए किसी पुराने (फ़ॉलबैक) सलूशन को तय करना और लागू करना है. कई मामलों में, यूज़र इंटरफ़ेस (यूआई) के पुराने फ़्रेमवर्क की सुविधाओं का इस्तेमाल करके, इन नए यूआई कॉम्पोनेंट का मकसद पूरा किया जा सकता है. उदाहरण के लिए:
-
ऐक्शन बार को लागू करने के लिए, इमेज बटन वाले हॉरिज़ॉन्टल
LinearLayout
का इस्तेमाल किया जा सकता है. इन्हें कस्टम टाइटल बार के तौर पर या गतिविधि लेआउट में व्यू के तौर पर लागू किया जा सकता है. ओवरफ़्लो ऐक्शन, डिवाइस के मेन्यू बटन में दिखाए जा सकते हैं. -
कार्रवाई बार वाले टैब को, बटन वाले हॉरिज़ॉन्टल
LinearLayout
याTabWidget
यूज़र इंटरफ़ेस (यूआई) एलिमेंट का इस्तेमाल करके लागू किया जा सकता है. -
NumberPicker
औरSwitch
विजेट को क्रमशःSpinner
औरToggleButton
विजेट का इस्तेमाल करके लागू किया जा सकता है. -
ListPopupWindow
औरPopupMenu
विजेट कोPopupWindow
विजेट का इस्तेमाल करके लागू किया जा सकता है.
आम तौर पर, नए यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट को पुराने डिवाइसों पर बैकपोर्ट करने के लिए, एक ऐसा तरीका नहीं है जो सभी डिवाइसों के लिए काम करे. उपयोगकर्ता अनुभव का ध्यान रखें: हो सकता है कि पुराने डिवाइसों पर, उपयोगकर्ता नए डिज़ाइन पैटर्न और यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट के बारे में न जानते हों. इस बारे में सोचें कि जाने-पहचाने एलिमेंट का इस्तेमाल करके, इस फ़ंक्शन को कैसे बेहतर बनाया जा सकता है. हालांकि, कई मामलों में यह समस्या कम होती है. जैसे, ऐप्लिकेशन के नेटवर्क में नए यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट प्रमुख हों (जैसे, ऐक्शन बार) या इंटरैक्शन मॉडल बहुत आसान और सहज हो (जैसे, ViewPager
का इस्तेमाल करके स्वाइप व्यू).
पुराने एपीआई का इस्तेमाल करके टैब लागू करना
ऐक्शन बार टैब को पुराने तरीके से लागू करने के लिए, TabWidget
और TabHost
का इस्तेमाल किया जा सकता है. हालांकि, इसके बजाय, हॉरिज़ॉन्टल तौर पर व्यवस्थित किए गए Button
विजेट का इस्तेमाल भी किया जा सकता है. इसे TabHelperEclair
और CompatTabEclair
क्लास में लागू करें. ऐसा इसलिए, क्योंकि यह लागू करने के लिए Android 2.0 (Eclair) के बाद के एपीआई का इस्तेमाल किया जाता है.
CompatTabEclair
लागू करने की प्रक्रिया में, इंस्टेंस वैरिएबल में टैब टेक्स्ट और आइकॉन जैसी टैब प्रॉपर्टी सेव होती हैं. इसकी वजह यह है कि इस स्टोरेज को मैनेज करने के लिए कोई ActionBar.Tab
ऑब्जेक्ट उपलब्ध नहीं है:
Kotlin
class CompatTabEclair internal constructor(val activity: FragmentActivity, tag: String) : CompatTab(tag) { // Store these properties in the instance, // as there is no ActionBar.Tab object. private var text: CharSequence? = null ... override fun setText(resId: Int): CompatTab { // Our older implementation simply stores this // information in the object instance. text = activity.resources.getText(resId) return this } ... // Do the same for other properties (icon, callback, etc.) }
Java
public class CompatTabEclair extends CompatTab { // Store these properties in the instance, // as there is no ActionBar.Tab object. private CharSequence text; ... public CompatTab setText(int resId) { // Our older implementation simply stores this // information in the object instance. text = activity.getResources().getText(resId); return this; } ... // Do the same for other properties (icon, callback, etc.) }
लागू किया गया TabHelperEclair
, TabHost
विजेट पर, TabHost.TabSpec
ऑब्जेक्ट और टैब इंडिकेटर बनाने के तरीकों का इस्तेमाल करता है:
Kotlin
class TabHelperEclair internal constructor(activity: FragmentActivity) : TabHelper(activity) { private var tabHost: TabHost? = null ... override fun setUp() { // Our activity layout for pre-Honeycomb devices // must contain a TabHost. tabHost = tabHost ?: mActivity.findViewById<TabHost>(android.R.id.tabhost).apply { setup() } } override fun addTab(tab: CompatTab) { ... tabHost?.newTabSpec(tab.tag)?.run { setIndicator(tab.getText()) // And optional icon ... tabHost?.addTab(this) } } // The other important method, newTab() is part of // the base implementation. }
Java
public class TabHelperEclair extends TabHelper { private TabHost tabHost; ... protected void setUp() { if (tabHost == null) { // Our activity layout for pre-Honeycomb devices // must contain a TabHost. tabHost = (TabHost) mActivity.findViewById( android.R.id.tabhost); tabHost.setup(); } } public void addTab(CompatTab tab) { ... TabSpec spec = tabHost .newTabSpec(tag) .setIndicator(tab.getText()); // And optional icon ... tabHost.addTab(spec); } // The other important method, newTab() is part of // the base implementation. }
अब आपके पास CompatTab
और TabHelper
को लागू करने के दो तरीके हैं: पहला तरीका, Android 3.0 या इसके बाद के वर्शन वाले डिवाइसों पर काम करता है और नए एपीआई का इस्तेमाल करता है. दूसरा तरीका, Android 2.0 या इसके बाद के वर्शन वाले डिवाइसों पर काम करता है और पुराने एपीआई का इस्तेमाल करता है. अगले लेसन में, अपने ऐप्लिकेशन में इन लागू करने के तरीकों का इस्तेमाल करने के बारे में बताया गया है.