wake-up-neo.com

Behandlung der fehlenden MENU-Taste in neuen Versionen von Android (3.x und höher)

Ich bin ein Fan der Menüschaltfläche, wie sie in Android <3.0 verwendet wird, da sie für meine Spiele-Apps sehr nützlich war - ich konnte wichtige, aber für das Spiel irrelevante Funktionen (Speichern des Spiels, Referenz) verwenden Info-Links) und platzieren Sie es an einem Ort, an dem es die Hauptoberfläche des Spiels nicht überfrachtet, aber dennoch leicht zugänglich war (das Optionsmenü).

Diese Verwendung von Tasten wurde zu einem Problem mit 3.0, da die MENU-Schaltfläche entfernt und durch die Aktionsleiste ersetzt wurde. Die Aktionsleiste ist wirklich nicht für ein Spiel geeignet, das gerne im Vollbildmodus ausgeführt wird. Das war also ein echtes Problem. Keine Aktionsleiste - kein Zugriff auf das Optionsmenü. Allerdings konnte ich es für eine Weile irgendwie ignorieren, da ich nicht so viele Benutzer auf Tablets hatte und keine Zeit hatte, dies zu testen.

Allerdings ist ICS ein ernstes Problem, da die MENU-Taste offensichtlich nicht mehr angezeigt wird. Jetzt muss ich mich nicht nur auf Tablets, sondern auch auf Handys mit diesen Problemen befassen.

Meine anfängliche Lösung für dieses Problem bestand darin, einfach einen Softbutton in meiner GUI zu platzieren, um den harten MENU Button zu ersetzen

this.openOptionsMenu();

Und alles funktioniert wieder einwandfrei in ICS.

Bei Honeycomb funktioniert dies jedoch nicht. Das Aufrufen von openOptionsMenu führt absolut zu nichts, wenn die ActionBar nicht sichtbar ist.

Irgendwelche Gedanken darüber, wie man damit umgeht?

  • Ich schätze, ich könnte jederzeit wieder TargetSDK <11 verwenden (wodurch die ActionBar auf Tablets angezeigt wird), aber soweit ich das sehe, wird das Problem nur in die Zukunft verschoben, was ich lieber nicht tun würde.

  • Lassen Sie das Optionsmenü vollständig fallen und verwenden Sie nur die Kontextmenüs? [Klarstellung: Damit meine ich, dass ich anstatt eines Optionsmenüs nur Kontextmenüs verwende, da diese - zumindest vorerst - auf allen Geräten funktionieren].

Interessiert, was andere, die ähnliche Probleme mit dem gesamten Optionsmenü/ActionBar-Durcheinander hatten, beschlossen haben, zu tun.

39
Michael A.

Lassen Sie mich ein anderes Szenario vorstellen, in dem die Menüschaltfläche kritisch wird, obwohl es sich nicht um ein Spiel handelt.

Ich habe App eigene Symbolleisten implementiert, die sich einigermaßen wie ActionBar verhalten. Nun, ich habe das getan, weil meine App mit 1.5 SDK veröffentlicht wurde. Zu diesem Zeitpunkt gibt es kein solches Konzept. Und um meine Symbolleisten unterzubringen, verstecke ich die Standard-Titelleiste. Einige der Aktionen werden jedoch über die Menüfunktion ausgeführt.

Inzwischen gibt es in Galaxy Nexus keine Menüschaltfläche mehr, wenn Sie ActionBar nicht verwenden. Das tut mir weh, weil meine App immer noch 1.5 unterstützt.

Nun, es gibt verschiedene Möglichkeiten, aber keine ist einfach.

Das einzige Problem, das ich habe, ist, dem Benutzer alle Optionen auf meiner Symbolleiste zuzuweisen, sodass überhaupt kein Menü erforderlich ist. Ich kann dies tun, weil ich nur zwei Aktionen habe, die nicht Teil der Symbolleiste sind.

In Ihrer Situation ist das Kontextmenü auf einer Schaltfläche keine schlechte Lösung in einem Spiel, da das Spiel nur einen Kontext hat, in dem es ausgeführt wird, im Vergleich zu einem Kontextmenü auf Listenelementen, in denen jedes Element einem anderen Kontext entspricht.

Übrigens, wenn openOptionsMenu auf ICS) funktioniert und Sie HoneyComb nach einer Weile loswerden können (auch jetzt ist die Benutzerbasis zu niedrig), geben Sie beide Menüs an basierend auf der Version) .

BEARBEITEN: Nun, es gibt auch eine andere Möglichkeit, die MENU s/w-Taste in der unteren Navigationsleiste aufzurufen. Setzen Sie einfach targetSdkVersion auf weniger als 11. Für weitere Details Bitte lesen Sie die gesamte Lösung.

19
havexz

Allerdings macht ICS ein ernstes Problem, da die MENU-Taste offensichtlich nicht zurückkommt.

Genauer gesagt, es liegt an den Geräteherstellern, ob für Dinge wie MENÜ Tasten außerhalb des Bildschirms zur Verfügung stehen oder nicht. Zitieren des Kompatibilitätsdefinitionsdokuments für Android 4.0:

Die Funktionen Home, Menu und Back sind für das Navigationsparadigma Android=) von wesentlicher Bedeutung. Geräteimplementierungen MÜSSEN diese Funktionen dem Benutzer jederzeit zur Verfügung stellen, wenn Anwendungen ausgeführt werden. Diese Funktionen können über dedizierte physische Tasten implementiert werden (wie z. B. mechanische oder kapazitive Touch-Tasten) oder KÖNNEN mithilfe dedizierter Softwaretasten, Gesten, Touch-Panels usw. implementiert werden.

Sie können sich also nicht darauf verlassen, dass eine nicht auf dem Bildschirm befindliche MENU-Taste vorhanden ist, obwohl es durchaus eine geben kann.

Irgendwelche Gedanken darüber, wie man damit umgeht?

Schreiben Sie Ihr eigenes "Menü" als Teil Ihrer Spieloberfläche. Ich würde nicht erwarten, dass ein Spiel den Vollbildmodus für die Verwendung des Optionsmenüs benötigt. Tatsächlich kann ich mich nicht erinnern, jemals ein Spiel gesehen zu haben, bei dem dies der Fall war (obwohl ich zugegebenermaßen kein Big-Time-Spieler bin). . Alle Spiele, die ich gespielt habe, tun nichts auf einer MENÜ-Presse. Vielmehr wird alles, was als "Menü" betrachtet werden könnte, direkt in der Spiel-Benutzeroberfläche implementiert (z. B. eine Schaltfläche, die zu einem Bildschirm führt, der im Look-and-Feel der Spiel-Benutzeroberfläche formatiert ist und Auswahlmöglichkeiten für Aufgaben bietet).

Lassen Sie das Optionsmenü vollständig fallen und verwenden Sie nur die Kontextmenüs?

Das wäre schrecklich, da Benutzer nicht wissen, wo sie lange drücken müssen, um das Menü aufzurufen.

2
CommonsWare

Und nur um den letzten Spike in den sprichwörtlichen Sarg der Menüschaltfläche zu stecken, wiegt sich Google mit einem letzten Abschied ein:

http://Android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html

2
Michael A.

Michael, ich befand mich in genau der gleichen Situation und löste diese, indem ich mein Optionsmenü in einem benutzerdefinierten Dialogfeld implementierte. Auf ICS) sieht es besser aus als im alten Optionsmenü unten. Es ist so konfiguriert

minSdkVersion = 8 targetSdkVersion = 14 SDK-Build-Version 8 (in den Eclipse-Einstellungen könnte der Wert auf 14 gesetzt werden, aber ich mag die Art der Sicherheit, die es bietet)

Benutzer mit API <10 verwenden die Schaltfläche für das harte Menü und sehen das Standardoptionsmenü. Benutzer mit API> = 10 sehen ein Dreipunktsymbol (Überlaufmenü) in der App. Wenn Sie auf klicken, wird das benutzerdefinierte Dialogmenü aufgerufen. Sie sehen auch das neue ICS in Einstellungen usw. suchen.

Es scheint nicht, dass die Menüschaltfläche wieder angezeigt wird und ich wollte die alte Barriere durchbrechen, obwohl nur <1% meiner Benutzer ICS verwenden.

0
user1076637

Als Reaktion auf diesen kürzlich veröffentlichten Blog-Beitrag möchten sie anscheinend, dass Entwickler Action Bars über Menüs verwenden. Dies ist jedoch problematisch, wenn sie API => 3.0 und API <3.0 unterstützen möchten. Erstellen Sie also entweder eine benutzerdefinierte Aktionsleiste, die mit API <3.0 kompatibel ist (Beispiele finden Sie im SDK), oder ... ich habe letzte Woche damit experimentiert:

Ich hatte auch ein Problem, bei dem die Menüschaltfläche nicht auf meinem ICS= Tablet angezeigt wurde. Ich glaube, ich hatte targetSdk zu dem Zeitpunkt auf 11 gesetzt, als ich eine ActionBar implementieren wollte. Dann habe ich minSdk auf gesetzt 3 und targetSdk bis 4. Sowohl die Aktionsleiste als auch die Menüüberlauf-Schaltfläche wurden angezeigt. Dies ist also die derzeitige Problemumgehung (zumindest für das Projekt, an dem ich arbeite).

0
aimango