¿Hay una manera fácil de agregar relleno entre la casilla de verificación en un control CheckBox y el texto asociado?
No puedo simplemente agregar espacios iniciales, porque mi etiqueta es de varias líneas.
Tal como está, el texto está demasiado cerca de la casilla de verificación:
TextView
condrawableLeft
y usardrawablePadding
para dar espacio al texto. En el código solo alterna los estados seleccionados y no seleccionados.Respuestas:
Odio responder mi propia pregunta, pero en este caso creo que necesito hacerlo. Después de verificarlo, @Falmarri estaba en el camino correcto con su respuesta. El problema es que el control CheckBox de Android ya usa la propiedad android: paddingLeft para obtener el texto donde está.
La línea roja muestra el valor de desplazamiento paddingLeft de todo el CheckBox
Si acabo de anular ese relleno en mi diseño XML, arruina el diseño. Esto es lo que hace la configuración paddingLeft = "0":
Resulta que no puedes arreglar esto en XML. Lo tienes que hacer en código. Aquí está mi fragmento con un aumento de relleno codificado de 10dp.
Esto le da lo siguiente, donde la línea verde es el aumento en el relleno. Esto es más seguro que codificar un valor, ya que diferentes dispositivos podrían usar diferentes elementos dibujables para la casilla de verificación.
ACTUALIZACIÓN: como la gente ha mencionado recientemente en las respuestas a continuación, este comportamiento aparentemente ha cambiado en Jelly Bean (4.2). Su aplicación deberá verificar en qué versión se está ejecutando y utilizar el método apropiado.
Para 4.3+ es simplemente establecer padding_left. Ver la respuesta de htafoya para más detalles.
fuente
paddingLeft="48sp"
? Funciona bien aquí, incluso si cambio la escala y la orientación. Su código me dio valores de relleno erráticos sobre una lista de elementos.getView()
un Adaptador personalizado (si recicla sus vistas), ya que el relleno aumentará infinitamente. Para solucionar este problema, tuve que usar algo como esto:boolean isHackNeeded = Build.VERSION.SDK_INT < 17; float scale = context.getResources().getDisplayMetrics().density; if (isHackNeeded) {CheckBox rb = new CheckBox(context); this.PADDING = rb.getPaddingLeft() + Math.round(10.0f * scale); } else { this.PADDING = Math.round(10.0f * scale); }
. Y luego usoPADDING
para cada CheckBox quecheck.setPadding(PADDING, check.getPaddingTop() ...
Dada la respuesta de @DougW, lo que hago para administrar la versión es más simple, agrego a mi vista de casilla de verificación:
donde el dimen se encuentra en dos carpetas de valores:
valores
valores-v17 (4.2 JellyBean)
Tengo un cheque personalizado, use el dps para su mejor opción.
fuente
values-v17
como se introdujo la solución en API 17 (según algunas publicaciones anteriores)Use el atributo en
android:drawableLeft
lugar deandroid:button
. Para establecer el relleno entre el dibujo y el uso del textoandroid:drawablePadding
. Para posicionar el uso dibujableandroid:paddingLeft
.fuente
android:background="@android:color/transparent"
y el margen izquierdo desaparecerán<item name="android:checkboxStyle">@style/CheckBox</item>
esa manera, tiene el estilo definido una vez y referenciado solo una vez.Android 4.2 Jelly Bean (API 17) pone el relleno de texto a la izquierda del botón Dibujable (lado derecho de las entradas). También funciona para el modo RTL.
Antes de 4.2 paddingLeft ignoraba el buttonDrawable: se tomó del borde izquierdo de la vista CompoundButton.
Puede resolverlo a través de XML: establezca paddingLeft en buttonDrawable.width + requiredSpace en los androides más antiguos. Configúrelo en requiredSpace solo en API 17 en adelante. Por ejemplo, use los recursos de dimensión y anule en la carpeta de recursos values-v17.
El cambio se introdujo a través de android.widget.CompoundButton.getCompoundPaddingLeft ();
fuente
android:background="@android:color/transparent"
.Sí, puede agregar relleno agregando relleno.
android:padding=5dp
fuente
Si desea un diseño limpio sin códigos, use:
El truco consiste en establecer el color en transparente para
android:drawableLeft
y asignar un valor paraandroid:drawablePadding
. Además, la transparencia le permite utilizar esta técnica en cualquier color de fondo sin el efecto secundario, como la falta de coincidencia de color.fuente
API 17 y superior, puede usar:
API 16 y a continuación, puede usar:
fuente
En mi caso, resolví este problema usando el siguiente atributo CheckBox en el XML:
* *
* *
fuente
Solución simple, agregue esta línea en las propiedades de CheckBox , reemplace 10dp con el valor de espacio deseado
fuente
No conozco chicos, pero probé
<CheckBox android:paddingLeft="8mm"
y solo mueve el texto hacia la derecha, no todo el control.Me queda bien.
fuente
¿Por qué no simplemente extender el CheckBox de Android para tener un mejor relleno? De esa manera, en lugar de tener que arreglarlo en el código cada vez que use CheckBox, puede usar el CheckBox fijo.
Primero Extender CheckBox:
Segundo en su xml en lugar de crear un CheckBox normal, cree su extendido
fuente
Acabo de concluir sobre esto:
Anule CheckBox y agregue este método si tiene un dibujo personalizado:
o esto si usa el sistema dibujable:
Gracias por la respuesta :)
fuente
Este comportamiento parece haber cambiado en Jelly Bean. El truco paddingLeft agrega relleno adicional, haciendo que el texto se vea demasiado a la derecha. ¿Alguien más nota eso?
fuente
Para espacio entre la marca de verificación y el uso del texto:
Pero se convierte en más de 10dp, porque la marca de verificación contiene relleno (alrededor de 5dp) alrededor. Si desea eliminar el relleno, consulte Cómo eliminar el relleno alrededor de Android CheckBox :
fuente
fuente
Bad idea for usability
No, no es. Coloque tanto la casilla de verificación como la vista de texto en un diseño lineal y haga que esa distribución lineal sea táctil.Si tiene un selector de imagen personalizado para la casilla de verificación o el botón de radio, debe establecer el mismo botón y propiedad de fondo como esta:
Puede controlar el tamaño de la casilla de verificación o el relleno del botón de opción con la propiedad de fondo.
fuente
solo necesitas tener un parámetro en el archivo xml
fuente
Establecer minHeight y minWidth en
0dp
fue la solución más limpia y directa para mí en Android 9 API 28:fuente
Si está creando botones personalizados, por ejemplo, vea el aspecto de cambio del tutorial de la casilla de verificación
Luego, simplemente aumente el ancho de btn_check_label_background.9.png agregando una o dos columnas más de píxeles transparentes en el centro de la imagen; deje los marcadores de 9 parches como están.
fuente
Lo que hice fue tener un
TextView
y unCheckBox
dentro de un (Relativo)Layout
. LasTextView
muestra el texto que desea que el usuario vea, y elCheckBox
no tiene ningún texto. De esa manera, puedo establecer la posición / relleno deCheckBox
donde quiera.fuente
Tuve el mismo problema con un Galaxy S3 mini (Android 4.1.2) y simplemente hice que mi casilla de verificación personalizada extendiera AppCompatCheckBox en lugar de CheckBox. Ahora funciona a la perfección.
fuente
Debe obtener el tamaño de la imagen que está utilizando para agregar su relleno a este tamaño. En los componentes internos de Android, obtienen el dibujo que especifiques en src y luego usan su tamaño. Dado que es una variable privada y no hay captadores a los que no puede acceder. Tampoco puede obtener el com.android.internal.R.styleable.CompoundButton y obtener el dibujable desde allí.
Por lo tanto, debe crear su propio estilo (es decir, custom_src) o puede agregarlo directamente en su implementación del RadioButton:
fuente
Como probablemente use un selector dibujable para su
android:button
propiedad, debe agregarandroid:constantSize="true"
y / o especificar un sorteo predeterminado como este:Después de eso, debe especificar el
android:paddingLeft
atributo en su casilla de verificación xml.Contras:
En el editor de diseño, verá el texto debajo de la casilla de verificación con la API 16 y debajo, en ese caso puede solucionarlo creando su clase de casilla de verificación personalizada como se sugiere pero para la API de nivel 16.
Razón fundamental:
es un error ya que la
StateListDrawable#getIntrinsicWidth()
llamada se usa internamenteCompoundButton
pero puede devolver< 0
valor si no hay un estado actual y no se usa un tamaño constante.fuente
Todo lo que tiene que hacer para superar este problema es agregar
android:singleLine="true"
alcheckBox
diseño xml de su Android:y nada especial se agregará mediante programación.
fuente
La imagen de la casilla de verificación se superpuso cuando utilicé mis propios dibujables del selector, lo resolví usando el siguiente código:
Gracias a Alex Semeniuk
fuente
Termino con este problema cambiando las imágenes. Acabo de agregar un fondo transparente adicional en los archivos png. Esta solución funciona excelente en todas las API.
fuente
Tal vez sea demasiado tarde, pero he creado métodos de utilidad para gestionar este problema.
Simplemente agregue estos métodos a sus utilidades:
Y use así:
o así:
fuente
En lugar de ajustar el texto para Checkbox, hice lo siguiente y funcionó para todos los dispositivos. 1) En XML, agregue la casilla de verificación y una vista de texto adyacente a una tras otra; manteniendo cierta distancia. 2) Establezca el tamaño del texto de la casilla de verificación en 0sp. 3) Agregue texto relativo a esa vista de texto al lado de la casilla de verificación.
fuente
<CheckBox android:drawablePadding="16dip"
- El relleno entre los dibujables y el texto.fuente