Botón de alternancia de varios estados

En la aplicación en la que he estado trabajando, me gustaría tener un botón de conmutación de varios estados (en mi caso, tres), en lugar de los dos que ToggleButton proporciona. He intentado iniciar mis propios Button que amplían, siguiendo el código de CompoundButton , pero muy honestamente leer sobre su fuente es un poco abrumador.

¿Hay una manera de hacer un botón de conmutación de tres estados usando sólo un selector xml o algo, o tal vez otro método que no he pensado? Estoy bastante en una pérdida de cómo hacer esto.

Definir sin duda un selector para utilizar como fondo que tiene tres entradas. La pregunta es qué atributos de botón puede utilizar para el selector. Puede tener dos atributos booleanos, digamos A y B, y definir el selector en términos de A, B y por defecto. (A && B satisfará A, por lo que más correctamente podrían ser pensados ​​como A,! A && B, y! A &&! B). Puede sobrecargar atributos existentes (seleccionados, enfocados, etc.) o, más elegantemente, Defina sus propios atributos personalizados usando la receta descrita en este hilo .

He implementado un botón multi-estado de conmutación, el código fuente está aquí

Así es como se ve:

Introduzca aquí la descripción de la imagen

Y es muy fácil de usar:

 <org.honorato.multistatetogglebutton.MultiStateToggleButton android:id="@+id/mstb_multi_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" mstb:values="@array/planets_array" /> 

En su actividad:

 MultiStateToggleButton button2 = (MultiStateToggleButton) this.findViewById(R.id.mstb_multi_id); button2.setOnValueChangedListener(new ToggleButton.OnValueChangedListener() { @Override public void onValueChanged(int value) { Log.d(TAG, "Value: " + value); } }); 

Puede crear un ImageButton personalizado para lograr esto, necesita 3 imágenes diferentes en este caso. También puede agregar más estados si lo desea.

 public class FlashButton extends ImageButton { public enum FlashEnum { AUTOMATIC, ON, OFF } public interface FlashListener { void onAutomatic(); void onOn(); void onOff(); } private FlashEnum mState; private FlashListener mFlashListener; public FlashButton(Context context, AttributeSet attrs) { super(context, attrs); //Sets initial state setState(FlashEnum.AUTOMATIC); } @Override public boolean performClick() { super.performClick(); int next = ((mState.ordinal() + 1) % FlashEnum.values().length); setState(FlashEnum.values()[next]); performFlashClick(); return true; } private void performFlashClick() { if(mFlashListener == null)return; switch (mState) { case AUTOMATIC: mFlashListener.onAutomatic(); break; case ON: mFlashListener.onOn(); break; case OFF: mFlashListener.onOff(); break; } } private void createDrawableState() { switch (mState) { case AUTOMATIC: setImageResource(R.drawable.ic_flash_auto); break; case ON: setImageResource(R.drawable.ic_flash_on); break; case OFF: setImageResource(R.drawable.ic_flash_off); break; } } public FlashEnum getState() { return mState; } public void setState(FlashEnum state) { if(state == null)return; this.mState = state; createDrawableState(); } public FlashListener getFlashListener() { return mFlashListener; } public void setFlashListener(FlashListener flashListener) { this.mFlashListener = flashListener; } } 

¿Por qué no usar RadioGroup y radios de estilo dentro?

  <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:layout_width="match_parent" android:layout_weight="1" android:layout_height="wrap_content" android:background="@drawable/your_drawable_selector" android:button="@android:color/transparent" android:gravity="center_horizontal" //center text android:text="text" /> ... 
  • Android: Especifique dos imágenes diferentes para el togglebutton mediante XML
  • Android - ¿Espacio entre TextView y Togglebutton?
  • Cómo cambiar el color de texto de un Android ToogleButton en el cambio de estado?
  • Cómo eliminar el relleno del botón de conmutación en Android
  • Cómo realizar vinculación de datos de dos vías con un ToggleButton?
  • El evento del botón de conmutación no funciona en varios dispositivos
  • Android: AmazingListView encabezado fijado es intocable
  • ¿Cómo saber si el usuario ha cambiado el estado del botón de alternancia?
  • Android Toggle Button en ActionBar
  • ToggleButton en ListView, el valor cambia automáticamente al desplazarse
  • Cómo cambiar el estado ToggleButton mediante programación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.