11

मैं एसडीके 11 में शामिल एक्शनबार सुविधा का उपयोग करना चाहता हूं। हालांकि मैं चाहता हूं कि ऐप एसडीके 10 (2.3.3) से पहले के डिवाइस पर चलाना चाहें। मैं पहले के उपकरणों के लिए एक्शनबार सुविधा छोड़ने को तैयार हूं क्योंकि यह एक महत्वपूर्ण विशेषता नहीं है। मैंने प्रतिबिंब, रैपर वर्ग और कुछ अन्य तकनीकों के बारे में सभी पढ़ाई की है। अब मैं इस काम को ठीक करने के तरीके पर फंस गया हूं। मैं ग्रहण का उपयोग कर रहा हूँ।एंड्रॉइड एसडीके में पिछड़े संगत नई सुविधा को कैसे कोड करें?

यदि मैं ग्रहण में लक्ष्य को 11 या उससे अधिक तक सेट नहीं करता हूं, तो किसी भी स्थान पर मेरे पास actionBar का संदर्भ है संकलन त्रुटि देता है। यदि मैंने लक्ष्य को एसडीके 11 या उससे अधिक तक रखा है तो यह संकलित करता है लेकिन यह नहीं दिखाएगा कि यह पहले के डिवाइस पर चल सकता है। मेरे पास android:minSdkVersion=10 हर समय सेट है।

क्या कोई मुझे actionBar पर संदर्भ बनाने के बारे में कुछ अंतर्दृष्टि दे सकता है और फिर भी इसे पिछले एसडीके स्तर को लक्षित करने के लिए प्राप्त कर सकता है? अग्रिम में धन्यवाद।

उत्तर

18

हाँ! आप निश्चित रूप से ऐसा कर सकते हैं। नीचे उल्लिखित पैटर्न का पालन करने का प्रयास करें।

अपने AndroidManifest.xml फ़ाइल में घोषित निम्नलिखित (मंच संस्करणों जो कुछ के साथ अपने एप्लिकेशन की आवश्यकता की जगह):

<!-- Build Target --> 
<uses-sdk android:targetSdkVersion="14" android:minSdkVersion="7" /> 

11 एपीआई या अधिक की एक मंच संस्करण लक्षित करके, आप ग्रहण से जोड़ने के लिए अनुमति दे रहे हैं (संकलन) देशी एक्शनबार कक्षाओं के खिलाफ। पहले न्यूनतम प्लेटफॉर्म संस्करण प्रदान करने से आपके ऐप को एंड्रॉइड के पुराने संस्करणों पर स्थापित (रन) करने की अनुमति मिलती है।

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (CompatibilityManager.isHoneycomb()) { 
     final ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayShowHomeEnabled(true); 
     // ... 
    } else { 
     // The ActionBar is unavailable! 
     // ... 
    } 
} 

कहाँ CompatibilityManager.java वर्ग बस एसडीके के वर्तमान संस्करण का निर्धारण करने के लिए स्थिर सहायक तरीके प्रदान:

आपका अभ्यास कोड तो कुछ इस तरह देखना चाहिए

public class CompatibilityManager { 
    public static final String KINDLE_FIRE_MODEL = "Kindle Fire"; 

    /** 
    * Get the current Android API level. 
    */ 
    public static int getSdkVersion() { 
     return android.os.Build.VERSION.SDK_INT; 
    } 

    /** 
    * Determine if the device is running API level 11 or higher. 
    */ 
    public static boolean isHoneycomb() { 
     return getSdkVersion() >= Build.VERSION_CODES.HONEYCOMB; 
    } 

    /** 
    * Determine if the device is running API level 14 or higher. 
    */ 
    public static boolean isIceCreamSandwich() { 
     return getSdkVersion() >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; 
    } 

    /** 
    * Determine if the current device is a first generation Kindle Fire. 
    * @return true if the device model is equal to "Kindle Fire", false if otherwise. 
    */ 
    public static boolean isKindleFire() { 
     return Build.MODEL.equals(KINDLE_FIRE_MODEL); 
    } 
} 

तुम भी विचार कर सकते हैं ActionBarSherlock लाइब्रेरी का लाभ उठाने, जो एंड्रॉइड 2.x:

पर एक संगत एक्शनबार एपीआई प्रदान करता है 0

लाइब्रेरी स्वचालित रूप से मूल क्रिया बार का उपयोग करेगी जब उपलब्ध होगा या स्वचालित रूप से आपके लेआउट के आसपास एक कस्टम कार्यान्वयन को स्वचालित रूप से लपेट देगा। यह आपको एंड्रॉइड के प्रत्येक संस्करण के लिए 2.x के माध्यम से एक्शन बार के साथ आसानी से एप्लिकेशन विकसित करने की अनुमति देता है।

मज़े करो!

+1

सामान्य पिछड़ा संगतता पर और दस्तावेज http://developer.android.com/resources/articles/backward-compatibility.html पर पाया जा सकता है। एक्शन बार दस्तावेज़ में यह भी शामिल है, और मूल रूप में इसका उपयोग कैसे करें और अभी भी पिछड़ा संगत हो। http://developer.android.com/guide/topics/ui/actionbar.html# – cistearns

+0

जोड़ना ठीक है, मैंने कुछ समान कोडिंग किया था। मैं आपको सुझाव भी सुझाऊंगा। मुझे तब मिली समस्या यह थी कि जब मैंने ऐप चलाने की कोशिश की और एमुलेटर (ग्रहण में) आया, तो केवल लक्ष्य स्तर के डिवाइस दिखाई दिए। मैंने निचले स्तर के डिवाइस को शुरू करने के लिए एवीडी मैनेजर का बारीकी से उपयोग किया और फिर इसे चलाने के दौरान विशेष रूप से इसका इस्तेमाल किया। मैं एक्शनबैरशेलॉक का उपयोग नहीं करना चुनता क्योंकि मैं केवल नए उपकरणों में सुविधा चाहता हूं। मैं बाद में अपना मन बदल सकता हूं। धन्यवाद। –

+2

AndroidManifest.xml में बिल्ड लक्ष्य और न्यूनतम संस्करण को बदलने के बाद आपको ग्रहण को बताने की आवश्यकता हो सकती है कि निर्माण लक्ष्य बदल दिया गया था। ऐसा करने के लिए, आप अपनी प्रोजेक्ट पर राइट-क्लिक कर सकते हैं और 'Properties' का चयन कर सकते हैं।फिर बाएं मेनू में 'एंड्रॉइड' का चयन करें और सुनिश्चित करें कि चेक किया गया लक्ष्य आपके मैनिफेस्ट में निर्दिष्ट एक के बराबर है। यह सब आपके प्रोजेक्ट रूट निर्देशिका में 'project.properties' बिल्ड फ़ाइल को अद्यतन करता है। – twaddington

संबंधित मुद्दे