Botón de Toggle de Android tamaño personalizado / relleno / espaciado

Estoy tratando de crear un estilo personalizado para mis botones de conmutación Android. Cambiar el color y el texto no fue un problema, pero estoy teniendo problemas para cambiar el tamaño / relleno / espaciado o lo que sea que les permiten aparecer tan innecesariamente grande por defecto. He establecido la altura de wrap_content y el relleno y margen a 0, pero el tamaño del botón sigue siendo tan grande como el botón de alternar predeterminado.

¿Alguien de ustedes sabe qué parámetros tengo que cambiar para eliminar el espacio innecesario entre el texto del botón y el borde?

Aquí hay un enlace a una imagen de lo que quiero lograr. De izquierda a derecha: Default ToggleButton, mi actual ToggleButton y el tipo de ToggleButton que quiero.

Aquí está mi código (como añado los botones de forma dinámica, no xml)

ToggleButton button = new ToggleButton(getContext()); button.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); button.setId(IDCreator.getID()); button.setText(tag); button.setTextOff(tag); button.setTextOn(tag); button.setGravity(Gravity.LEFT); button.setPadding(0, 0, 0, 0); button.setBackground(getContext().getResources().getDrawable(R.drawable.toggle_selector)); 

Gracias por tu ayuda. Saludos cordiales.

Editar: Imagen y Código

Si sólo está tratando de cambiar la forma en que se representa el texto dentro del ToggleButton , entonces debe ajustar los parámetros android:padding y android:gravity en el XML de su botón.

Para cambiar el relleno, primero tiene que tomar el texto lejos de ser centrado por defecto (porque cuando se centró el relleno no tiene la capacidad de tener efecto). Usted hace esto por el android:gravity parámetro de la android:gravity que es como alinear texto en CSS.

Por ejemplo;

 <ToggleButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left"> </ToggleButton> 

Esto alineará el texto a la izquierda del ToggleButton. Sin embargo, esto también lo alineará a la parte superior de forma predeterminada, ya que la gravedad ejerce tanto el eje x como el eje y.

Si desea alinear el centro verticalmente ya la izquierda horizontalmente, haga lo siguiente:

 <ToggleButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left|center"> </ToggleButton> 

Esto le dará centrado vertical, pero totalmente a la izquierda en la escala horizontal. Esto hará que el texto ir ontop del borde de su botón y buscar poco atractivo. Usted necesita utilizar las alineaciones junto con un relleno para el texto para conseguirlo exactamente donde usted desea.

Por ejemplo:

 <ToggleButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding_left="10dp" android:gravity="left|center"> </ToggleButton> 

Esto agrega el relleno a la izquierda solamente que significa que usted puede fijarlo tanto lejos de la frontera como usted tiene gusto.

Usted puede jugar con el relleno para cada lado y la gravedad con el fin de escalar el texto a sus necesidades, pero esta sería la mejor manera de controlar la alineación de texto interno del ToggleButton.

Esto le dará el ancho de la cadena, es decir, Texto en su caso.

 Paint paint = toggleButton.getPaint(); float length = paint.measureText(YOUR_STRING); 

Esto le da el ancho de la cadena que tendría en la pantalla. Ahora configure el ancho del botón de conmutación a través de LayoutParams.

Digamos que la disposición de los padres de su botón de conmutación es LinearLayout. Por lo que debe ir como:

 toggleButton.setLayoutParams(new LayoutParams(WIDTH_YOU_CALCULATED,LinearLayout.LayoutParams.WRAP_CONTENT)); 

Esto establecerá el ancho y la altura de su ToggleButton a lo que haya calculado.

Me doy cuenta de que esto es obsoleto, pero quizás usar setScaleX ({proporcionar un flotador 0.0 – 1.0}) y setScaleY ({proporcionar un flotador 0.0 – 1.0}) podría ser la respuesta para la publicación original (cómo cambiar el tamaño del botón de alternar ).

Utilice CheckedTextView en su lugar: https://stackoverflow.com/a/36084999/377320 Es sólo un TextView regular con estado marcado, por lo que no paddings extraño, etc

  • Android: Crear un botón de alternancia con imagen y sin texto
  • Android Toggle Button en ActionBar
  • ToggleButton en ListView, el valor cambia automáticamente al desplazarse
  • Cómo eliminar el relleno del botón de conmutación en Android
  • Colocación de etiquetas de texto ToggleButton para estado activado y desactivado
  • Botón de selección de Android MenuItem
  • ¿Cómo puedo obtener el texto dinámico ToggleButton en android?
  • Centrar la imagen ToggleButton - sin texto
  • Cómo realizar vinculación de datos de dos vías con un ToggleButton?
  • Agregar el widget Switch a ActionBar y responder al evento de cambio
  • Cómo cambiar el color de texto de un Android ToogleButton en el cambio de estado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.