Ich möchte, dass alle Menüelemente, die nicht in die ActionBar passen, in das Überlaufmenü (das über die Aktionsleiste und nicht über die Menüschaltfläche erreicht wird) verschoben werden, auch auf Geräten, die über eine Menüschaltfläche verfügen . Dies scheint für Benutzer viel intuitiver zu sein, als sie in eine separate Menüliste zu werfen, in der der Benutzer von einer Touchscreen-Interaktion (Bildschirminteraktion) zu einer auf Schaltflächen basierenden Interaktion springen muss, nur weil das Layout der ActionBar nicht in die Leiste passt.
Auf dem Emulator kann ich den Wert "Hardware Back / Home Keys" auf "no" setzen und diesen Effekt erzielen. Ich habe nach einer Möglichkeit gesucht, dies im Code für ein tatsächliches Gerät zu tun, das eine Menüschaltfläche hat, aber keine in Ordnung bringen kann. Kann mir jemand helfen?
quelle
Sie können diesen kleinen Hack auch hier verwenden:
Ein guter Ort, um es
onCreate
auszudrücken, wäre die Methode Ihrer Anwendungsklasse.Dadurch wird die App gezwungen, das Überlaufmenü anzuzeigen. Die Menüschaltfläche funktioniert weiterhin, öffnet jedoch das Menü in der oberen rechten Ecke.
[Bearbeiten] Da es jetzt schon mehrmals aufgetaucht ist: Dieser Hack funktioniert nur für die native ActionBar, die in Android 3.0 eingeführt wurde, nicht für ActionBarSherlock. Letzterer verwendet seine eigene interne Logik, um zu entscheiden, ob das Überlaufmenü angezeigt werden soll. Wenn Sie ABS verwenden, werden alle Plattformen <4.0 von ABS verwaltet und unterliegen somit seiner Logik. Der Hack funktioniert weiterhin für alle Geräte mit Android 4.0 oder höher (Sie können Android 3.x ignorieren, da es keine Tablets mit einer Menüschaltfläche gibt).
Es gibt ein spezielles ForceOverflow-Theme, das das Menü in ABS erzwingt, aber es wird anscheinend in zukünftigen Versionen aufgrund von Komplikationen entfernt .
quelle
Field
Sie diesen ausjava.lang.reflect.Field
;)Um dies zu umgehen, definiere ich mein Menü wie folgt (auch mit dem in meinem Beispiel verwendeten ActionBarSherlock-Symbol):
Ich gebe zu, dass dies möglicherweise ein manuelles "Überlaufmanagement" in Ihrer XML erfordert, aber ich fand diese Lösung nützlich.
Sie können das Gerät in Ihrer Aktivität auch zwingen, die HW-Taste zum Öffnen des Überlaufmenüs zu verwenden:
:-)
quelle
Wenn Sie die Aktionsleiste aus der Support-Bibliothek (
android.support.v7.app.ActionBar
) verwenden, verwenden Sie Folgendes:quelle
Diese Art von Methode wird vom Android Developers Design System verhindert, aber ich habe einen Weg gefunden, sie zu bestehen:
Fügen Sie dies Ihrer XML-Menüdatei hinzu:
Erstellen Sie als Nächstes eine Klasse mit dem Namen 'AppPickActionProvider' und kopieren Sie den folgenden Code:
quelle
Nun, ich denke, dass Alexander Lucas die (leider) richtige Antwort gegeben hat, also markiere ich sie als die "richtige". Die alternative Antwort, die ich hier hinzufüge, besteht einfach darin, neue Leser auf diesen Beitrag im Android Developers-Blog als eine ziemlich vollständige Diskussion des Themas mit einigen spezifischen Vorschlägen zum Umgang mit Ihrem Code beim Übergang von Pre-Level 11 hinzuweisen zur neuen Aktionsleiste.
Ich glaube immer noch, dass es ein Designfehler war, wenn sich die Menüschaltfläche nicht als redundante "Aktionsüberlauf" -Schaltfläche in Geräten mit Menüschaltfläche verhält, um die Benutzererfahrung zu verbessern, sondern das Wasser unter der Brücke zu diesem Zeitpunkt.
quelle
Ich bin mir nicht sicher, ob dies das ist, wonach Sie suchen, aber ich habe ein Untermenü im Menü der Aktionsleiste erstellt und das Symbol so eingestellt, dass es mit dem Symbol des Überlaufmenüs übereinstimmt. Obwohl keine Elemente automatisch an ihn gesendet werden (dh Sie müssen auswählen, was immer sichtbar und was immer übergelaufen ist), scheint mir dieser Ansatz hilfreich zu sein.
quelle
In der mit vorinstalliertem ICS gelieferten Google Mail-App ist die Menüschaltfläche deaktiviert, wenn Sie mehrere Elemente ausgewählt haben. Das Überlaufmenü wird hier "gezwungen", durch die Verwendung der Überlauftaste anstelle der physischen Menütaste ausgelöst zu werden. Es gibt eine Drittanbieter-Bibliothek namens ActionBarSherlock, mit der Sie das Überlaufmenü "erzwingen" können. Dies funktioniert jedoch nur auf API-Ebene 14 oder niedriger (vor ICS).
quelle
Wenn Sie die Symbolleiste verwenden , können Sie den Überlauf auf allen Versionen und allen Geräten anzeigen. Ich habe es auf einigen 2.x-Geräten versucht. Es funktioniert.
quelle
Entschuldigung, wenn dieses Problem behoben ist.
Folgendes habe ich getan, um den Fehler zu beheben. Ich ging zu Layouts und erstellte zwei mit Symbolleisten. Eines war ein Layout für SDK Version 8 und das andere war für SDK Version 21. In Version 8 habe ich die android.support.v7.widget.Toolbar verwendet, während ich android.widget.Toolbar für das SDK 21 Layout verwendet habe.
Dann blase ich die Symbolleiste in meiner Aktivität auf. Ich überprüfe das SDK, um festzustellen, ob es 21 oder höher war. Ich blase dann das entsprechende Layout auf. Dadurch wird die Hardware-Schaltfläche gezwungen, der tatsächlich entworfenen Symbolleiste zuzuordnen.
quelle
Für alle, die das neue verwenden
Toolbar
:quelle