2012-12-05 4 views
7

Ich bin für die kostenlose Methode mentuItem.setShowAsAction(), das heißt menuItem.getShowAsAction(), da es nicht zu sein scheint.Android MenuItem Get-Methode für showAsAction

http://developer.android.com/reference/android/view/MenuItem.html

Als ich brauche den aktuellen Zustand aufzuzeichnen, bevor sie zu MenuItem.SHOW_AS_ACTION_NEVER Einstellung, so dass, wenn die Ausrichtung des Geräts auf Landschaft ändert sich zurück kann ich die Menüpunkte zu ihren alten Zustand zurückzukehren.

Ich brauche dies zu tun, wie Honeycomb bietet keine neue Zeile Registerkarten zu zeigen, wie in ICS. In Waben gibt es nicht genug Platz für die Tabs.

Gibt es eine andere Universal-get Eigenschaften Methode in Java oder Android die Einstellung in der XML für das Attribut showAsAction in menuitem zu finden.

dank

+0

Sie etwas gefunden? Ich suche nach der gleichen Methode. – Peterdk

+0

Nein konnte nichts finden. Und es ist Waben nicht (wie ich es auf einem Honeycomb-Gerät zu diesem Zeitpunkt zu testen worden war), aber es tatsächlich bestimmte Bildschirmkonfigurationen wie extra großer und im Portrait-Modus betroffen. In Honeycomb war es jedoch nicht möglich, sich an den Status des Menüelements zu erinnern und es neu zu erstellen. – pt123

Antwort

1

Ich fand heraus, dass die folgende Klasse diese Methode isActionButton hat()

android.support.v7.internal.view.menu.MenuItemImpl

Bitte beachten Sie, dass MenuItem eine Schnittstelle ist und nicht eine Klasse, von der das vermeintliche menuitem Objekt Instanz wurde erstellt. Wenn Sie das Kompatibilitätspaket android.support.v7 verwenden, müssen Sie das Objekt menueit einfach auf MenuItemImpl.

Es wird so gemacht:

((MenuItemImpl)item).isActionButton() 
+0

Weiterhin die genannten Klasse bietet die Methoden 'requestsActionButton()', 'requiresActionButton()' und 'showsTextAsAction()', die Sie, ob die Flags erkennen helfen 'SHOW_AS_ACTION_IF_ROOM',' SHOW_AS_ACTION_ALWAYS' oder 'SHOW_AS_ACTION_WITH_TEXT' gesetzt sind, und Sie don‘ Ich muss mit der Bitmaske herumspielen! – Taig

+0

@Taig Haben Sie etwas dagegen erklären, ein bisschen wie mit diesem Verfahren den Wert der Flagge (n) in setShowAsAction verwendet get()? – f470071

0

Sie diese Methode verwenden können, von dem, was in der anderen Antwort gesagt wurde:

@SuppressLint("RestrictedApi") 
private int getShowAsActionFlag(MenuItem item) { 
    MenuItemImpl itemImpl = ((MenuItemImpl) item); 
    if (itemImpl.requiresActionButton()) return MenuItemImpl.SHOW_AS_ACTION_ALWAYS; 
    else if (itemImpl.requestsActionButton()) return MenuItemImpl.SHOW_AS_ACTION_IF_ROOM; 
    else if (itemImpl.showsTextAsAction()) return MenuItemImpl.SHOW_AS_ACTION_WITH_TEXT; 
    else return MenuItemImpl.SHOW_AS_ACTION_NEVER; 
}