Ist es möglich, die Optionsmenüpunkte programmgesteuert zu ändern? Kann mir bitte jemand ein Beispiel geben?
Außerdem möchte ich bestimmte Elemente deaktivieren, damit sie nicht auf die Klicks hören. Ist das möglich?
Denn jeder muss die Optionen des Menüs dynamisch ändern:
private Menu menu;
// ...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
this.menu = menu;
getMenuInflater().inflate(R.menu.options, menu);
return true;
}
// ...
private void hideOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(false);
}
private void showOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(true);
}
private void setOptionTitle(int id, String title)
{
MenuItem item = menu.findItem(id);
item.setTitle(title);
}
private void setOptionIcon(int id, int iconRes)
{
MenuItem item = menu.findItem(id);
item.setIcon(iconRes);
}
menu
dies eingestellt wurde, bevor Sie versuchen, esMenuItem
herauszuholen. Wenn Sie beispielsweise so etwas habenactionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
, werden die Registerkarten vor dem Menü geladen, sodass das Aufrufen vonhideOption
/showOption
insideonTabSelected
zu einer Nullzeigerausnahme führt.item.setVisible(false);
, wird das Element nur ausgeblendet, wenn ich auf das Menü selbst klicke. Wenn ichinvalidateOptionsMenu();
den Artikel verwende, antworte ich nicht auf das Klicken. Ich freue mich, wenn Sie mir bei einem ähnlichen Problem helfen könnten, mit dem ich konfrontiert bin. stackoverflow.com/questions/54756799/…setVisible
Zustände, die Sie auch anrufen sollten,setEnabled(false)
andernfalls kann das Element weiterhin über die Verknüpfung aufgerufen werdenmenu.xml
in deine Java-Datei einfügen
quelle
Wie Nikolay sagte, mach das in onPrepareOptionsMenu ().
Für Menüpunkte in der Aktionsleiste müssen Sie das Menü mit ungültig machen
activity.invalidateOptionsMenu();
Dies wird hier ausführlicher beschrieben. Wie kann ich die ActionBar aktualisieren, wenn onPrepareOptionsMenu die Menüeinträge wechselt?
quelle
Wenn ich den Inhalt meines Optionsmenüs ändern muss, führe ich ihn während des onMenuOpened () aus. Auf diese Weise kann ich den Betriebszustand in dem Moment überprüfen, in dem der Benutzer auf das Menü zugreift.
quelle
So deaktivieren Sie bestimmte Elemente:
quelle
item.setVisible(false);
wird mein Element nur ausgeblendet, wenn ich auf das Menü selbst klicke (drei Punkte). Wenn ichinvalidateOptionsMenu();
einige Elemente verwende, reagieren Sie nicht auf das Klicken. Ich freue mich, wenn Sie mir bei einem ähnlichen Problem helfen könnten, mit dem ich konfrontiert bin. stackoverflow.com/questions/54756799/…Mit den folgenden Zeilen habe ich die Werte im Menü hinzugefügt
Versuchen Sie diese Arbeit wie ein Zauber für mich.
quelle
Versuchen Sie diesen Code:
quelle
invalidateOptionsMenu();
, funktionieren meine immer sichtbaren Elemente nicht mehr (ich meine, die Elemente reagieren nicht auf Klicks). Ich freue mich, wenn Sie mir bei einem ähnlichen Problem helfen könnten, mit dem ich konfrontiert bin. stackoverflow.com/questions/54756799/…Sie können etwas Einfaches tun, wie ich es getan habe. Ändern Sie einfach den Text in den gewünschten Text, wenn Sie den Menüpunkt berühren. Ich musste den Ton ein- und ausschalten sowie die Möglichkeit, eine Aktion durch Berühren auszuführen. Hier ist mein Code:
audioOn und touchOn sind Boolesche Werte, die in anderen Teilen des Codes überprüft werden. Hoffe das hilft.
quelle
Sie können Ihre Aufgabe einfach durch Implementierung wie folgt erfüllen:
quelle
Falls Sie eine BottomBar haben:
Dann müssen Sie nur noch anrufen:
quelle
Kotlin-Code für den programmgesteuerten Zugriff auf OptionsmenüoptionenMenüelemente und Ändern des Texts / Symbols, ..:
1-Wir haben unseren Menüpunkt in der Menüpunktdatei wie: menu.xml, Beispielcode dafür:
2- Definieren Sie eine Variable für den Zugriff auf Menüobjekte in der Klasse:
3- Initialisieren Sie es in onCreateOptionsMenu:
4- Greifen Sie auf die Menüelemente in Ihrem Code oder Spaß zu:
quelle
quelle