Ich habe eine Aktionsleiste mit einem Menüpunkt. Wie kann ich diesen Menüpunkt aus-/einblenden?
Das ist es, was ich zu tun versuche:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
Ich habe eine Aktionsleiste mit einem Menüpunkt. Wie kann ich diesen Menüpunkt aus-/einblenden?
Das ist es, was ich zu tun versuche:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
Setzen Sie zunächst die Sichtbarkeit des Menüpunkts in der Menü-Layout-Datei wie folgt auf false :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:visible="false"
android:id="@+id/action_do_something"
android:title="@string/txt_do_something"
app:showAsAction="always|withText"
android:icon="@drawable/ic_done"/>
</menu>
Sie können dann einfach die Sichtbarkeit des Menüeintrags in Ihrer onCreateOptionsMenu() nach dem Aufblasen des Menüs auf false setzen.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(menu,R.menu.menu);
MenuItem item = menu.findItem(R.id.menuItemId);
if (item != null){
item.setVisible(false);
}
}
Der beste Weg, um alle Einträge in einem Menü mit nur einem Befehl auszublenden, ist die Verwendung von "group" in Ihrer Menü-XML. Fügen Sie einfach alle Menüpunkte, die in Ihrem Überlaufmenü sein werden, in dieselbe Gruppe ein.
In diesem Beispiel haben wir zwei Menüpunkte, die immer angezeigt werden (normaler Punkt und Suche) und drei Überlaufpunkte:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/someItemNotToHide1"
android:title="ITEM"
app:showAsAction="always" />
<item
android:id="@+id/someItemNotToHide2"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
<group android:id="@+id/overFlowItemsToHide">
<item android:id="@+id/someID"
android:orderInCategory="1" app:showAsAction="never" />
<item android:id="@+id/someID2"
android:orderInCategory="1" app:showAsAction="never" />
<item android:id="@+id/someID3"
android:orderInCategory="1" app:showAsAction="never" />
</group>
</menu>
Verwenden Sie dann in Ihrer Aktivität (vorzugsweise bei onCreateOptionsMenu) den Befehl setGroupVisible, um die Sichtbarkeit aller Menüelemente auf false oder true zu setzen.
public boolean onCreateOptionsMenu(Menu menu) {
menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}
Wenn Sie diesen Befehl an anderer Stelle in Ihrer Aktivität verwenden möchten, müssen Sie die Menüklasse lokal speichern und immer prüfen, ob menu null ist, da Sie ihn vor createOptionsMenu ausführen können:
Menu menu;
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
}
public void hideMenus() {
if (menu != null) menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.