2012-07-22 11 views
18

Mi chiedo se sarebbe possibile dire ad Android di dividere ActionBar solo quando lo voglio, ma sulla stessa attività. Il mio caso d'uso è che, per impostazione predefinita, le azioni che ho sulla barra sono OK per essere compresse, ma con un clic lungo su un elemento, accedo a una modalità "Modifica attività", dove la barra delle azioni viene utilizzata per fornire alcune scorciatoie a modifica un'attività. Mi piacerebbe che questa "modalità di modifica" usasse la barra di azione divisa, poiché ha le icone che sono meglio essere visibili subito e mantenere la barra di azione "non divisa" per la vista generale - dove sono solo "impostazioni" ecc.Impostazione splitActionBarWhenNarrow da Java su Android

Quindi la domanda è, è possibile impostare android:uiOptions="splitActionBarWhenNarrow" dal codice, invece di hardcode nel Manifest?

PS: Uso ActionBar Sherlock.

risposta

23

La barra azioni nativo può essere impostato in modalità raggruppati per chiamando getWindow().setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW).

Le opzioni dell'interfaccia utente della finestra non possono essere lette dopo che sono state impostate, quindi con ActionBarSherlock è necessario chiamare getSherlock().setUiOptions(...). Non devi chiamare entrambi. L'ABS chiamerà automaticamente quanto sopra quando appropriato.

Questo deve essere eseguito prima che la vista di decorazione sia stata creata. Il posto più sicuro in cui mettere questa chiamata per accertarsi che ciò avvenga sempre è nel tuo esercizio onCreate metodo prima del chiami super.onCreate.

+0

Grazie, questo risponde alla mia domanda! Purtroppo è apparentemente impossibile scambiare le modalità split/no-split su un'attività esistente. Immagino che creerò un'attività di dettagli che avrà la barra delle azioni divisa, quindi ha senso comunque penso :-) –

+0

Che cos'è la funzione getSherlock()? – tasomaniac

+0

@tasomaniac Fa parte di ActionBarSherlock a cui si riferisce l'OP nella sua domanda. –

3

Dai un'occhiata a ActionBarSherlockSamples, SplitActionModes.java. In questo esempio, quando si preme il pulsante 'Start', una barra di azione spaccatura compare nella parte inferiore dello schermo:

chiamata questo per mostrare l'ActionBar scissione:

mMode = startActionMode(new AnActionModeOfEpicProportions()); 

mMode è tipo di ActionMode e devi chiamare 'finish()' su di esso quando vuoi che la barra delle azioni scompaia.

AnActionModeOfEpicPropotions è un'implementazione di ActionMode.Callback:

private final class AnActionModeOfEpicProportions implements ActionMode.Callback { 
    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     // add your menu here... 
    } 

    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     // handles your action menu clicked event 
     return true; 
    } 
} 
-2
private final class AnActionModeOfEpicProportions implements ActionMode.Callback 
{ 
    @Override 
    public boolean onCreateActionMode(ActionMode mode,Menu menu) 
    { 
    // add your menu here... 
    } 
    @Override 
    public boolean onActionItemClicked(ActionMode mode,MenuItem item) 
    { 
    // handles your action menu clicked event 
    returntrue; 
    } 
} 
+2

Si prega di formattare il codice e aggiungere alcune spiegazioni. –

0

Stavo solo provando se potevo avere un ActionBar in un'attività e uno split in un altro.

ho aggiunto nella barra delle operazioni in onCreateOptionsMenu in entrambe le attività e ha aggiunto getWindow() setUiOptions (ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW).;

prima di onCreate nell'attività volevo l'azione di divisione e con mia sorpresa ha funzionato. :)

Quindi ho utilizzato getActionBar(). Hide() per nascondere la barra di azione divisa al clic del pulsante e ha funzionato anche.

Immagino che se potessi provare questo, puoi farlo funzionare e adattarlo alle tue necessità. Nascondendolo inizialmente e onLongClick mostrandolo e dopo aver eseguito le azioni necessarie nascondendolo nuovamente. (L'unica cosa che mi è sfuggita è verificare con le librerie di supporto. Ti aggiornerò e aggiornerò)

Spero che questo possa aiutarti in qualche modo. Felice codifica :)

Problemi correlati