मैं टूलबार में एक ओवरफ्लो मेनू दिखाना चाहता हूं (AppCompat-v7: 22.1.1), नीचे मेरा menu_main.xml है।टूलबार ओवरफ़्लो मेनू में मेनू आइटम आइकन दिखाते समय यह अजीब स्थिति कैसे होती है?
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@mipmap/ic_menu_search"
android:orderInCategory="100"
android:actionViewClass="android.widget.SearchView"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_group_chat"
android:title="@string/menu_group_chat"
android:icon="@mipmap/ic_menu_groupchat" />
<item
android:id="@+id/menu_add_friend"
android:title="@string/menu_add_friend"
android:icon="@mipmap/ic_menu_add_friend" />
मेरे एप्लिकेशन चलाने के बाद, मेनू आइटम के आइकन प्रदर्शित नहीं किया जाता है, तो मैं इस solution की कोशिश की, मेरी Activty (AppCompatActivity तक फैली हुई है) में एक ओवरराइड विधि onMenuOpened() जोड़ने के लिए,
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if(menu!=null){
if(menu.getClass().getSimpleName().equals("MenuBuilder")){
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
लेकिन इस डेमो को चलाने के बाद, मुझे लगता है कि आइकन अभी भी प्रदर्शित नहीं हुआ है।
इस reported issue से, मुझे पता है कि AppCompatActivity.onMenuOpened 22.x में किसी भी अधिक नहीं कहा है, लेकिन यह अजीब है कि जब मैं Genymotion में हार्डवेयर मेनू कुंजी क्लिक करें, मेनू नीचे दिखाई देती हैं और आइकन के साथ,
मेनू बंद करने के बाद, मैं उपकरण पट्टी में अतिप्रवाह बटन को फिर से क्लिक करें, मेनू में ये आइकन दिखाई देते हैं,
यह कितना अजीब बात है! ऐसा क्यूँ होता है?
यह स्वाद का मामला हो सकता है के रूप में MainActivity के लेआउट में जोड़ा गया था, लेकिन मुझे लगता है कि 'अगर (menu.getClass()। बराबर (MenuBuilder.class))' की तुलना में अधिक सुंदर है 'अगर (menu.getClass()। getSimpleName()। के बराबर होती है ("MenuBuilder")) '। कम हार्डकोडेड बेहतर IMHO तार ;-) – Matthias
मेरी टिप्पणी को अनदेखा करें। इसे अपने तरीके से करने से यह एंड्रॉइड के मूल मेनूबिल्डर और ऐपकॉमपेट दोनों के लिए काम करता है। अच्छी नौकरी! – Matthias
इसे एक उत्तर के रूप में स्वीकार किया जाना चाहिए। – Chitrang