पुराने एपीआई के साथ लागू करें

इस सबक में, ऐसे तरीके के बारे में बताया गया है जिससे ऐसा ऐप्लिकेशन बनाया जा सकता है जो नए एपीआई के साथ-साथ पुराने डिवाइसों पर भी काम करे.

कोई दूसरा विकल्प चुनना

पुराने डिवाइसों पर, नए यूज़र इंटरफ़ेस (यूआई) की सुविधाओं का इस्तेमाल करने में सबसे मुश्किल काम यह तय करना और लागू करना है कि प्लैटफ़ॉर्म के पुराने वर्शन के लिए, पुराना (फ़ॉलबैक) विकल्प कौनसे इस्तेमाल किया जाए. कई मामलों में, यूज़र इंटरफ़ेस (यूआई) के पुराने फ़्रेमवर्क की सुविधाओं का इस्तेमाल करके, यूज़र इंटरफ़ेस (यूआई) के इन नए कॉम्पोनेंट के मकसद को पूरा किया जा सकता है. उदाहरण के लिए:

  • ऐक्शन बार को, इमेज बटन वाले हॉरिज़ॉन्टल LinearLayout का इस्तेमाल करके लागू किया जा सकता है. इन्हें कस्टम टाइटल बार या आपके ऐक्टिविटी लेआउट में व्यू के तौर पर इस्तेमाल किया जा सकता है. मेन्यू बटन पर क्लिक करने के बाद, ओवरफ़्लो ऐक्शन दिखाए जा सकते हैं.

  • ऐक्शन बार टैब को, बटन वाले हॉरिज़ॉन्टल LinearLayout या TabWidget यूज़र इंटरफ़ेस (यूआई) एलिमेंट का इस्तेमाल करके लागू किया जा सकता है.

  • NumberPicker और Switch विजेट को, क्रमशः Spinner और ToggleButton विजेट का इस्तेमाल करके लागू किया जा सकता है.

  • ListPopupWindow और PopupMenu विजेट को, PopupWindow विजेट का इस्तेमाल करके लागू किया जा सकता है.

आम तौर पर, यूज़र इंटरफ़ेस (यूआई) के नए कॉम्पोनेंट को पुराने डिवाइसों पर इस्तेमाल करने के लिए, कोई एक तरीका नहीं होता. उपयोगकर्ता अनुभव का ध्यान रखें: पुराने डिवाइसों पर, उपयोगकर्ताओं को डिज़ाइन के नए पैटर्न और यूज़र इंटरफ़ेस (यूआई) के नए कॉम्पोनेंट के बारे में जानकारी नहीं हो सकती. इस बारे में सोचें कि जाने-पहचाने एलिमेंट का इस्तेमाल करके, एक ही फ़ंक्शनैलिटी कैसे दी जा सकती है. कई मामलों में, यह कोई समस्या नहीं होती. जैसे, अगर ऐप्लिकेशन इकोसिस्टम में यूज़र इंटरफ़ेस (यूआई) के नए कॉम्पोनेंट अहम हैं (जैसे, कार्रवाई बार) या जहां इंटरैक्शन मॉडल बुनियादी और आसान है (जैसे, ViewPager का इस्तेमाल करके स्वाइप व्यू).

टैब लागू करने के लिए, पुराने एपीआई का इस्तेमाल करना

ऐक्शन बार टैब का पुराना वर्शन बनाने के लिए, TabWidget और TabHost का इस्तेमाल किया जा सकता है. हालांकि, इनके बजाय हॉरिज़ॉन्टल लेआउट वाले Button विजेट का भी इस्तेमाल किया जा सकता है. इसे TabHelperEclair और CompatTabEclair नाम की क्लास में लागू करें, क्योंकि इस तरीके में Android 2.0 (Eclair) या इससे पहले के वर्शन में लॉन्च किए गए एपीआई का इस्तेमाल किया जाता है.

टैब को लागू करने के लिए Eclair का क्लास डायग्राम.
पहली इमेज. टैब के 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.TabSpec ऑब्जेक्ट और टैब इंडिकेटर बनाने के लिए, TabHost विजेट के तरीकों का इस्तेमाल करता है:

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 या इसके बाद के वर्शन वाले डिवाइसों पर काम करता है और पुराने एपीआई का इस्तेमाल करता है. अगले सबक में, आपके ऐप्लिकेशन में इन वर्शन का इस्तेमाल करने के बारे में बताया गया है.