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.
- Android: Crear un botón de alternancia con imagen y sin texto
- Botón de Toggle de Android tamaño personalizado / relleno / espaciado
- Colocación de etiquetas de texto ToggleButton para estado activado y desactivado
- Botón de selección de Android MenuItem
- Utilice el botón de conmutación estilo Android 4.0
- Establecer ToggleButton para reproducir el sonido predeterminado cuando se hace clic en?
- Botón de encendido / apagado en las preferencias y barra de acción - Ice Cream Sandwich Estilo
- Botón de alternancia en el cajón de navegación
- Agregar el widget Switch a ActionBar y responder al evento de cambio
- ¿Es posible crear un ToggleButton sin texto?
- cómo guardar togglebutton estado utilizando preferencias compartidas
- Pantalla personalizada de botón de conmutación de Android
- ¿Cómo puedo obtener el texto dinámico ToggleButton en android?
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:
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: ¿es posible agregar un enlace que se puede hacer clic en un recurso de cadena
- ¿Cómo detectar la disponibilidad de funciones de hotspot móvil en Android mediante programación?