¿Es posible implementar el botón de alternar en el elemento de menú de acción mediante Actionbar sherlock en android
Tengo una aplicación, que tienen botón de conmutación en el elemento de menú de acción, aunque estoy usando barra de acción Sherlock, no sé, cómo colocar el botón de alternar en el elemento de menú de acción. No quiero colocarlo como un diseño personalizado en la barra de acción, pero quiero colocarlo como un elemento de menú. Si alguien encuentra la solución, por favor, ayúdame.
Propósito, si cambio el estado del botón de la palanca, clasificará a la persona basada en ALFABETAS y otra vez en fecha de nacimiento.
- ActionBarSherlock apilado barra de acción estilo problema
- Navegación de la lista ActionBar: color de texto diferente en el encabezado y el menú emergente
- Diseño de barra de acciones personalizada con menú de desbordamiento
- Android + eclipse + maven + acciónbarsherlock
- ¿Hay una manera de establecer actionBarTabTextStyle específicamente para la barra de acción apilada?
¡Gracias por adelantado!
- NavigationDrawer utilizando sólo la biblioteca de asistencia de Android
- Preferencias con ActionBar Sherlock
- Cómo poner superposición Ver sobre barra de acción Sherlock
- Android - Actionbar Sherlock - Filtro de búsqueda
- Fragmentos de Viewpager y de Sherlock. ¿Cómo hacer somethng dentro de fragmento de FragmentActivity?
- Cómo cambiar dinámicamente el menú en onCreateOptionsMenu
- Error de Gradle: Android Studio, ActionbarSherlock y SlidingMenu
- La conversión al formato de Dalvik falló con error 1 adt r18
Sólo tienes que añadir como un botón de menú normal, comprobar su estado con una variable booleana, y puede cambiar el icono y el título al cambiar el 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); }
No olvide añadirlo en xml como cualquier otro botón de menú y configurar android:showAsAction
si desea mostrarlo en desbordamiento o fuera de él.
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_toogle" android:showAsAction="ifRoom" android:title="Share" /> </menu>
Otro enfoque sería utilizar un diseño personalizado para tu ActionBar:
Básicamente, se define un diseño que contiene su 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: Luego en su contenedor de actividad o fragmento usted hace:
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);
Tenga en cuenta que tiene un ToggleButton real y lo está manejando en el código como un objeto real ToggleButton, que tiene muchas ventajas en comparación con tener que volver a implementar su propio toggle (tema, fiabilidad, jerarquía de vistas, soporte nativo …) .
Código fuente aquí .
ALTERNATIVA 2: Otra forma de hacerlo es incrustar su vista personalizada en una vista de menú normal:
<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>
Si como yo la acciónLayout no funciona, pruebe la app:actionLayout="@layout/actionbar_service_toggle"
lugar de android:actionLayout="@layout/actionbar_service_toggle"
así como app:showAsAction="always"
lugar de android:showAsAction="always"
Esto se debe a que si utiliza appCompat, no se utilizará el espacio de nombres android.
Así que aquí está la versión final:
<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>
y
<?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>
Crear archivo xml en el menú:
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>
Y luego navegar a su carpeta de diseño hacer un nuevo archivo xml y el nombre de switch_layout.xml Aquí está el código: 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>
En la clase MainActivity, copie y pegue este código:
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
O sigue este enlace sobre estas cosas
- Eliminar marcador anterior y agregar nuevo marcador en Google Map v2
- Lista de retención en el fragmento de lista sobre el cambio de orientación