2013-02-19 6 views
19

zu implementieren Ich habe eine App, die Umschaltfläche im Menü Aktion, obwohl ich Actionbar Sherlock, ich weiß nicht, wie Sie platzieren die Umschalttaste im Menüpunkt Aktion. Ich möchte kein benutzerdefiniertes Layout in der Aktionsleiste platzieren, aber ich möchte es als Menüelement platzieren. Wenn jemand eine Lösung findet, bitte hilf mir.Ist es möglich, Toggle Button in Aktion Menüpunkt mit Actionbar sherlock in android

Zweck, Wenn ich den Status der Umschaltfläche ändern, wird es die Person basierend auf ALphabetes und wieder in Geburtsdatum sortieren.

Vielen Dank im Voraus!

+0

, warum Sie nicht verwenden möchten, eine benutzerdefinierte Aktion Layout? –

+0

Ich hatte bereits ein benutzerdefiniertes Layout für die Aktionsleiste verwendet Titel – RajeshVijayakumar

+0

Sie können im Überlaufmenü keinen 'ToggleButton' setzen. Das Überlaufmenü kann jedoch überprüfbare Elemente unterstützen - das habe ich nicht versucht. – CommonsWare

Antwort

36

Fügen Sie einfach es wie eine normale Menü-Taste, überprüfen Sie dessen Zustand mit einem boolean Variable, und Sie können auf das Symbol und den Titel ändern, wenn die Änderung die 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); 


} 

Vergessen Sie nicht, es in xml hinzuzufügen wie jede andere Menü-Taste und konfigurieren android:showAsAction, wenn Sie es im Überlauf oder außerhalb davon anzeigen möchten.

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

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

Zusätzlich können Sie das Toggle-Button-Symbol aus dem Android-SDK-Ordner – wutzebaer

+0

greifen Aber die Ansicht ist kein Toggle-Button, es ist eine normale

3

Anderer Ansatz wäre, ein eigenes Layout für Ihre ActionBar zu verwenden:

Grundsätzlich definieren Sie ein Layout, die Ihren Toggle enthält:

<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> 

Alternative 1: Dann in Ihrer Aktivität oder Fragment Behälter Sie tun:

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); 

Beachten Sie, dass Sie eine echte ToggleButton haben und Sie es im Code als reales Objekt ToggleButton sind Handling, die viele Vorteile im Vergleich zu mit Ihnen neu implementieren Ihre eigenen Knebel (Thema hat, Zuverlässigkeit, Ansichten Hierarchie, native Unterstützung ...).

Quellcode here.


Alternative 2: Eine andere Möglichkeit, es zu tun einzubetten ist Ihre benutzerdefinierte Ansicht in eine reguläre Menüansicht:

<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

XML-Datei in Menü erstellen:

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> 

Und dann navigieren zum Layout-Ordner eine neue XML-Datei machen und es switch_layout.xml Hier ist der Code-Name: 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> 

In Ihrem MainActivity Klasse kopieren und fügen Sie diesen Code:
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 

Oder diese link über diese Dinge folgen

2

Wenn Sie wie ich die actionLayout für Sie nicht app:actionLayout="@layout/actionbar_service_toggle" funktioniert, versuchen Sie statt android:actionLayout="@layout/actionbar_service_toggle" sowie app:showAsAction="always" statt android:showAsAction="always" Dies, weil, wenn Sie verwenden appCompat wird der Android-Namespace nicht verwendet.

Also hier ist die finale Version:

<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> 

und

<?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> 
Verwandte Themen