Ich möchte ein Überlaufmenü in der Symbolleiste anzeigen (AppCompat-v7: 22.1.1), unten ist meine menu_main.xml.Wie kommt es zu dieser merkwürdigen Bedingung, wenn das Symbol des Menüeintrags im Überlaufmenü der Werkzeugleiste angezeigt wird?
<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" />
Nach meiner App ausgeführt wird, wird das Symbol des Menüpunkt nicht angezeigt wird, dann habe ich versucht, diese solution, eine Überschreibung Methode hinzufügen onMenuOpened() in meinem Tierbew (erstreckt sich von AppCompatActivity),
@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);
}
Aber nach dem Ausführen dieser Demo finde ich, dass das Symbol immer noch nicht angezeigt wird.
Von diesem reported issue, ich weiß, dass AppCompatActivity.onMenuOpened nicht mehr in 22.x genannt wird, aber es ist seltsam, dass, wenn ich die Hardware-Menü-Taste in Genymotion klicken, wird das Menü am unteren Rand erscheinen und mit dem Symbol,
nach dem Schließen des Menüs, ich auf die Überlauf-Schaltfläche in der Symbolleiste wieder in Menü diese Symbole erscheinen,
wie seltsam es ist! Warum passiert das?
Es kann eine Frage des Geschmacks, aber ich denke 'if (menu.getClass(). Equals (MenuBuilder.class))' eleganter ist als 'wenn (menu.getClass(). getSimpleName(). equals ("MenuBuilder")) '. Je weniger hartcodierte Saiten, desto besser IMHO ;-) – Matthias
Ignoriere meinen Kommentar. Wenn Sie es auf Ihre Weise tun, funktioniert es sowohl für den nativen MenuBuilder als auch für AppCompat von Android. Gut gemacht! – Matthias
Dies sollte als Antwort akzeptiert werden. – Chitrang