Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo agregar un interruptor a la barra de acción de Android?

Quisiera agregar un interruptor del botón similar al aspecto nativo del jellybean. (Interruptor azul / gris en la parte superior de la vista) Introduzca aquí la descripción de la imagen

La documentación muestra cómo crear un menú allí o añadir iconos, pero no dice, cómo agregar elementos personalizados. p.ej. Un interruptor. Http://developer.android.com/guide/topics/ui/actionbar.html

  • ¿Qué no puedes hacer en la VM de Dalvik (VM de Android) que puedes usar en Sun VM?
  • Xiaomi no recibe notificación cuando la aplicación no se está ejecutando
  • ¿Diferencia entre "tamaño de pantalla" y "densidad de pantalla" en Android?
  • Apoyo al mercado de Amazon y Android (Google Play) dentro de la aplicación
  • ActionBarActivity con ActionBarDrawerToggle - No utiliza drawerImageRes
  • Adición de imágenes / iconos adicionales a CardFragment (Android Wear)
  • En Android, ¿cómo configuro los márgenes en dp mediante programación?
  • Inicio del servicio desde BroadcastReceiver
  • Android - necesito algunas aclaraciones de fragmentos vs actividades y vistas
  • Android, Solicitud de ubicación, establecer la duración de caducidad no funciona
  • Cómo almacenar texto largo en Android?
  • Cómo habilitar el acceso a la ubicación mediante programación en android?
  • 4 Solutions collect form web for “¿Cómo agregar un interruptor a la barra de acción de Android?”

    Cree un diseño para el switch switch_layout.xml . Los diseños personalizados para el menú siempre deben ser RelativeLayout

     <?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/switchForActionBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /> </RelativeLayout> 

    Entonces, en su mainmenu.xml agregue el artículo como sigue

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

    Y en su actividad, infle el mainmenu.xml como siempre lo hace

     getMenuInflater().inflate(R.menu.mainmenu, menu); return true; 

    Si el widget no está apareciendo en la barra de acción es probablemente porque está usando appCompat para su barra de acción. Para solucionar este cambio "android:" to "app:" delante de "showAsAction" y "actionLayout" en su menu.xml

    Agregar elemento a xml, con la aplicación: en lugar de android:

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

    Hacer la disposición que usted está utilizando para su "app: actionLayout"
    Switch_layout

     <?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" /> </RelativeLayout> 

    Infla el menú en tu ActionBarActivity como lo harías normalmente

      getMenuInflater().inflate(R.menu.mainmenu, menu); return true; 

    Esto debería hacer que el interruptor aparezca en su barra de acción, si no estaba apareciendo.

    Finalmente averiguó mi problema: para aquellos que están usando el nuevo AppCompat, debería usar android.support.v7.widget.SwitchCompat lugar de Switch el diseño del switch … de lo contrario, no se mostrará en el ActionBar (asumido que usted 'Re usando AppCompat ActionBar también), bueno, el atributo actionLayout no funciona, tiene que ser fijado en el código.

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/switchView" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <android.support.v7.widget.SwitchCompat android:id="@+id/switchForActionBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" /> </RelativeLayout> 

    A continuación, establezca el diseño en el código:

     @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem item = menu.findItem(R.id.on_off_switch); item.setActionView(R.layout.on_off_switch); return true; } 

    La solución dada por Ezequiel es impresionante y funciona. Aquí va otro enfoque:

    Defina su diseño personalizado:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" > <Switch android:id="@+id/actionbar_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /> </RelativeLayout> 

    Inflalo programaticamente:

     ActionBar actionBar = getSupportActionBar(); actionBar.setCustomView(R.layout.actionbar_top); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); ... Switch button = (Switch) findViewById(R.id.actionbar_switch); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.