2012-12-05 9 views
7

Sto cercando il metodo gratuito per mentuItem.setShowAsAction(), cioè menuItem.getShowAsAction() come non sembra essere uno.Android MenuItem il metodo per l'showAsAction

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

Come ho bisogno di registrare lo stato corrente prima di inserirli a MenuItem.SHOW_AS_ACTION_NEVER, in modo che quando l'orientamento del dispositivo torna ad paesaggio posso tornare le voci di menu per il loro vecchio stato.

Ho bisogno di fare questo come Honeycomb non fornisce una nuova riga per mostrare le schede come in ICS. Quindi in nido d'ape non c'è abbastanza spazio per le schede.

Esiste un altro metodo di proprietà di acquisizione universale in Java o Android per trovare l'impostazione nell'XML per l'attributo showAsAction in menuitem.

grazie

+0

Hai trovato qualcosa? Sto cercando lo stesso metodo. – Peterdk

+0

No non ho trovato nulla. E non è a nido d'ape (come avevo provato su un dispositivo Honeycomb in quel momento), ma in realtà ha colpito alcune configurazioni dello schermo come extra-large e in modalità portrait. Ma in Honeycomb non è stato in grado di ricordare lo stato delle voci del menu e ricostruirlo. – pt123

risposta

1

ho scoperto che la classe sotto ha questo metodo isActionButton()

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

Si prega di notare che MenuItem è un'interfaccia e non una classe da cui il presunto oggetto menuitem l'istanza è stata creata.

Se si utilizza il pacchetto di compatibilità android.support.v7, basta lanciare l'oggetto menuitem su MenuItemImpl.

E 'fatto così:

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

Inoltre la classe menzionata offre i metodi 'requestsActionButton()', 'requireActionButton()' e 'showsTextAsAction()' che aiutano a rilevare se i flag 'SHOW_AS_ACTION_IF_ROOM',' SHOW_AS_ACTION_ALWAYS' o 'SHOW_AS_ACTION_WITH_TEXT' sono impostati, e non si ' Devo giocherellare con la maschera di bit! – Taig

+0

@Taig Ti spiace spiegare un po 'come ottenere con questi metodi il valore delle flag utilizzate in setShowAsAction()? – f470071

0

È possibile utilizzare questo metodo, da quello che è stato detto in un'altra risposta:

@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; 
}