2012-10-13 9 views
7

मैंने संस्करण 4.2 में अपग्रेड किया और पाया कि मेरा पुराना कोड संकलित नहीं हुआ क्योंकि ऐसा लगता है कि फोर्स ओवरफ्लो पैरेंट थीम हटा दी गई है।एक्शनबैरशेल फोर्स ओवरफ्लो संसाधन नहीं मिला

After Googling this issue ऐसा लगता है कि यह जानबूझ कर डिवाइस संगत मेनू बटन बनाए रखने के लिए हटा दिया गया था।

मैं भौतिक मेनू बटन का उपयोग करने के लिए तर्क को समझता हूं, लेकिन मैं इसके साथ सहमत नहीं हूं ... साथ ही यह उन पुराने मेनू को बहुत बदसूरत है।

मैं वास्तव में नहीं चाहता कि उपयोगकर्ता कहें कि वे पिछली कार्यक्षमता तक नहीं पहुंच सकते हैं (जिसके बाद मेन्यू बटन स्क्रीन पर दिखाई देने के कारण स्थानांतरित हो गए थे), तो यहां मेरे विकल्प क्या हैं? क्या भविष्य में रिलीज में यह बदला जाएगा? क्या मुझे एबीएस के पिछले संस्करण के साथ रहना है और पुराने एबीएस libs में कुछ अन्य बगों से निपटना है जो हाल के संस्करणों में तय किए गए थे? क्या कोई काम आसपास है?

+0

मैं अभी के लिए 4.1 के साथ छड़ी का फैसला किया ... इस बारे में खुश नहीं या तो लेकिन बहुत खुश एबीएस के साथ ... – dorjeduck

उत्तर

9

"असली" ओवरफ़्लो मेनू प्राप्त करने का प्रयास करने के बजाय, हम इसे सबमेनू के साथ नकली बना सकते हैं।

यह मूल ओवरफ्लो बटन की तरह दिखेगा और व्यवहार करेगा, बस बेहतर होगा क्योंकि यह हमेशा वहां रहेगा।

private Menu mainMenu; 
private SubMenu subMenu1; 

    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    mainMenu = menu; 

    subMenu1 = menu.addSubMenu(""); 
    subMenu1.add("Settings"); 
    subMenu1.add("About"); 
    subMenu1.add("Help"); 

    MenuItem subMenu1Item = subMenu1.getItem(); 
    subMenu1Item.setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_dark); 
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    return super.onCreateOptionsMenu(menu); 
} 

बेशक आप सबमेनस सेट कर सकते हैं जैसा आपने पहले किया था। GroudID, itemID आदि के साथ

ध्यान दें कि मैंने मेनू आइकन के रूप में * ic_menu_moreoverflow_normal_holo_dark * पहले से ही चुना है। इस तरह बटन भी एक ओवरफ्लो की तरह दिखेगा।

अब जब उपयोगकर्ता हार्डवेयर मेनू बटन दबाता है तो हमें बस इस सबमेनू को खोलने की आवश्यकता होती है। यदि आप मेनमेनू और सबमेनू 1 को पहले सेट करते हैं तो हम इसे बहुत आसान कर सकते हैं।

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
      mainMenu.performIdentifierAction(subMenu1.getItem().getItemId(), 0); 
      return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

खबरदार आप आयात:

import com.actionbarsherlock.view.SubMenu; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

और नहीं:

import android.view.MenuItem; 
+0

हे, कोड स्निपेट के लिए धन्यवाद, लेकिन मुझे एक समस्या का सामना करना पड़ रहा है। मेरे मुख्य मेनू में मेरे पास एक संक्षिप्त खोजदृश्य है और जब भी मैं मेनू बटन दबाता हूं, वह खोज ओवरफ़्लो मेनू के बजाय विस्तारित होता है। – Asim

+0

शायद आपके ऑनकेप() विधि में, आप गलत सबमेनू को कॉल करते हैं। – Sorcerer

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