2013-02-19 1 views
19

Ho un'app, che ha il pulsante di attivazione nella voce del menu azione, anche se sto usando Actionbar Sherlock, non so, come posizionare il pulsante di commutazione nella voce del menu azione. Non voglio posizionarlo come layout personalizzato nella barra delle azioni, ma voglio inserirlo come elemento di menu. Se qualcuno trova una soluzione, per favore aiutami.È possibile implementare il pulsante Toggle in Action Menu Item utilizzando la barra delle azioni sherlock in Android

Scopo, se cambio lo stato del pulsante di commutazione, ordinerà la persona in base a ALphabets e nuovamente in Data di nascita.

Grazie in anticipo!

+0

perché non si desidera utilizzare un layout di un'azione personalizzata? –

+0

Già avevo usato il layout personalizzato per la barra delle azioni Titolo – RajeshVijayakumar

+0

Non è possibile inserire un 'ToggleButton' nel menu di overflow. Tuttavia, il menu di overflow può supportare elementi controllabili: non l'ho provato. – CommonsWare

risposta

36

Basta aggiungere come un normale pulsante Menu, verificare il suo stato con una variabile booleana, e si può modificare l'icona e il titolo quando si cambia la SortMode

boolean birthSort=false; 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_toggle: 

     if(birthSort){ 
      //change your view and sort it by Alphabet 
      item.setIcon(icon1) 
      item.setTitle(title1) 
      birthSort=false; 
     }else{ 
      //change your view and sort it by Date of Birth 
      item.setIcon(icon2) 
      item.setTitle(title2) 
      birthSort=true; 
     } 
     return true; 



    } 
    return super.onOptionsItemSelected(item); 


} 

Non dimenticate di aggiungere in xml come qualsiasi altro pulsante del menu e configurare android:showAsAction se si desidera mostrarlo in overflow o al di fuori di esso.

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@+id/menu_toogle" 
    android:showAsAction="ifRoom" 
    android:title="Share" 
    /> 
</menu> 
+0

addizionalmente si può afferrare l'icona del pulsante di commutazione dalla cartella android-sdk – wutzebaer

+0

Ma la vista non è un pulsante di commutazione, è normale

3

Altro approccio sarebbe quello di utilizzare un layout personalizzato per il vostro ActionBar:

Fondamentalmente è definire un layoutche contiene il Toggle:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ToggleButton 
    android:id="@+id/actionbar_service_toggle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOn="Logging On" 
    android:textOff="Logging Off" /> 
</RelativeLayout> 

ALTERNATIVA 1: Poi nella tua attività o frammento contenitore che fate:

ActionBar actionBar = getSupportActionBar(); 
actionBar.setCustomView(R.layout.actionbar_top); 
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); 
... 
ToggleButton button = (ToggleButton) findViewById(R.id.actionbar_service_toggle); 

noti che si stanno avendo un vero e proprio ToggleButton e si gestisce in codice come un oggetto reale ToggleButton, che ha un sacco di vantaggi rispetto di poter avere a re-implementare il proprio ginocchiera (tema, affidabilità, gerarchia delle visualizzazioni, supporto nativo ...).

Codice sorgente here.


ALTERNATIVA 2: Un altro modo per farlo è incorporare la visualizzazione personalizzata in una normale vista del menu:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/myswitch" 
     android:title="" 
     android:showAsAction="always" 
     android:actionLayout="@layout/actionbar_service_toggle" /> 
</menu> 
1

creare file XML nel menu:

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="si.ziga.switchinsideab.MainActivity"> 
<item android:id="@+id/switchId" android:title="" android:showasaction="always" android:actionlayout="@layout/switch_layout"> 
    <item android:id="@+id/action_settings" android:orderincategory="100" android:title="@string/action_settings" app:showasaction="never"> 
</item></item></menu> 

E quindi navigare nella cartella layout di fare un nuovo file XML e il nome switch_layout.xml Ecco il codice: switch_layout.xml

<!--?xml version="1.0" encoding="utf-8"?--> 
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="horizontal"> 
<switch android:id="@+id/switchAB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true"> 
</switch></relativelayout> 

Nella classe copia MainActivity e incolla questo codice:
MainActivity.java

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
getMenuInflater().inflate(R.menu.menu, menu); 

switchAB = (Switch)menu.findItem(R.id.switchId) 
.getActionView().findViewById(R.id.switchAB);7 

Oppure seguire questa link su questa roba

2

Se come me l'actionLayout non funziona per voi, provate app:actionLayout="@layout/actionbar_service_toggle" invece di android:actionLayout="@layout/actionbar_service_toggle" nonché app:showAsAction="always" invece di android:showAsAction="always" Questo perché se si utilizza appCompat lo spazio dei nomi di Android non verrà utilizzato.

Quindi, ecco la versione finale:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ToggleButton 
    android:id="@+id/actionbar_service_toggle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOn="Logging On" 
    android:textOff="Logging Off" /> 
</RelativeLayout> 

e

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/myswitch" 
     android:title="" 
     app:showAsAction="always" 
     app:actionLayout="@layout/actionbar_service_toggle" /> 
</menu>