2012-09-26 10 views
5

मैं एक आवेदन लिख रहा हूं। इसे उपयोगी होने के लिए पुराने एंड्रॉइड ओएस पर चलने की जरूरत है। मैंने वरीयताओं की एक प्राथमिकता का उपयोग करके वरीयता स्क्रीन लिखी है जो वरीयता स्क्रीन सहित एक options.xml फ़ाइल के साथ पॉप्युलेट करता है। इसमें वरीयताओं के लिए कोई सबमेनू नहीं है (इसलिए वरीयता फ़्रेगमेंट कोई वास्तविक लाभ प्रदान नहीं करता है)।वरीयता सक्रियता एंड्रॉइड 2.1 पर ठीक से काम करती है, लेकिन 4.1 (गद्दीदार)

Android 2.1 में परिदृश्य में तो जैसे (2.2 और 2.3, अभी तक आईसीएस पर परीक्षण नहीं किया) स्क्रीन ठीक से प्रदर्शित: Eclair

लेकिन जेलीबीन पर, यह इस तरह दिखता है: Jellybean

यह भयानक लग रहा है। मेरे पास लेआउट के रूप में परिभाषित कुछ भी नहीं है, केवल मानक addPreferencesFromResource()। क्या किसी को पता है कि इसका कारण क्या हो सकता है? या एक समाधान?

मेरे onCreate इस तरह दिखता है:

protected void onCreate(Bundle savedInstanceState) { // 
    super.onCreate(savedInstanceState); 
    Log.i(TAG, "Options Activity Loaded."); 
    setTitle(getString(R.string.optionsTitle)); 
    addPreferencesFromResource(R.xml.options); 
    setupListeners(); 
} 

बाकी सब कुछ सिर्फ पसंद वस्तुओं बनाता है और तरीकों प्रदान करती है ताकि उन पर क्लिक करने के सामान करना है। मैं वरीयता फ्रेगमेंट और वरीयता सक्रियता दोनों के लिए कोड नहीं बनाना चाहता हूं। मुझे समझ में नहीं आता कि Google हमें फ्रैगमेंट एपीआई का उपयोग करने की अपेक्षा करता है यदि सबसे बड़ा संस्करण मार्केटशेयर में एपीआई नहीं है और वे इसे संगतता lib में नहीं जोड़ेंगे।

+0

मुझे लगता है कि आईसीएस/जेबी वरीयता स्क्रीन में वह पैडिंग है। मुझे सच में यकीन नहीं है कि इसे हटाने का कोई तरीका है, लेकिन मैं एक निश्चित उत्तर नहीं दे रहा हूं (यही कारण है कि मैंने अभी टिप्पणी की है।) – Jwc24678

+0

मैं बस वहां फेंक दूंगा ['addPreferencesFromResource() '] (http://developer.android.com/reference/android/preference/PreferenceActivity.html#addPreferencesFromResource(int)) बहिष्कृत है। शायद 4.0+ पर अभी भी समर्थित समर्थित विधियों (उस दस्तावेज़ पृष्ठ में विस्तृत) का उपयोग करके आपको उचित परिणाम मिलेंगे। – Eric

+0

उनसे बचने की उम्मीद है ... लेकिन इसे आत्मसमर्पण करना और इसे वैसे भी करना पड़ सकता है। मुझे समझ में नहीं आता कि वे इसे पूरी तरह से संगत क्यों नहीं करेंगे। पैडिंग के लिए कोई कारण नहीं है। – Mgamerz

उत्तर

1

आपका एप्लिकेशन SharePreferences के लिए पुरानी और नई कार्यक्षमता दोनों का समर्थन कर सकता है। आप पुराने प्राथमिकताओं और नए के लिए कक्षा के लिए कक्षा प्रदान कर सकते हैं। यह ज्यादा कोड नहीं है। आप अपने ऐप को इस तरह पिछड़ा संगत बना सकते हैं:

Class spc = Build.VERSION_SDK_INT < Build.VERSION_CODES.HONEYCOMB ? 
    oldPreferenceActivity.class : newFragmentPreferenceActivity.class; 

Intent i = new Intent (this, spc); 
startActivityForResult (i, SHOW_PREFERENCES); 
संबंधित मुद्दे