Android: ¿Cómo cambiar el tamaño de CheckBox?

Me gustaría hacer que CheckBox sea un poco más pequeño / más grande, ¿cómo puedo hacer esto?

Solo necesita establecer los productos relacionados y configurarlos en la checkbox:

 

El truco está en cómo configurar los dibujables. Aquí hay un buen tutorial sobre esto .

Comenzando con API Nivel 11 existe otro enfoque:

  

Aquí hay una mejor solución que no recorta y / o desenfoca el dibujable, pero solo funciona si la checkbox no tiene texto (pero aún puede tener texto, es más complicado, ver al final).

  android:layout_height="160dp" android:button="@null" android:background="?android:attr/listChoiceIndicatorMultiple"/> 

El resultado:

Cómo era la solución anterior con scaleX y scaleY :

Puede tener una checkbox de texto al agregar una TextView al lado y agregar un oyente de clic en el diseño principal, luego activando la checkbox mediante progtwigción.

Bueno, he encontrado muchas respuestas, pero funcionan bien sin texto cuando requerimos texto también con checkbox como en mi interfaz de usuario enter image description here

Aquí, según mi requisito de UI, no puedo boost TextSize así que otras opciones que probé son scaleX y scaleY (Ponga la checkbox) y el selector xml personalizado con .png Images (también está creando problemas con diferentes tamaños de pantalla)

Pero tenemos otra solución para eso, que es Vector Drawable

Hazlo en 3 pasos.

Paso 1: copia allí Vector Drawable en tu carpeta dibujable

checked.xml

    

un_checked.xml

    

( Tenga en cuenta que si trabaja con Android Studio, también puede agregar el formulario Vector Drawable allí, haga clic con el botón derecho en su carpeta dibujable y luego en Activo nuevo / vector, y seleccione estos dibujables desde allí ) Paso 2: Cree el selector Xml para check_box

check_box_selector.xml

      

Paso 3: establece ese drawable en la checkbox

  

Ahora es como:

enter image description here


Puede cambiar su ancho y alto o la ventana viewPeight y viewportWidth y fillColor también


Espero que ayude!

Esto fue lo que hice, primer juego:

android:button="@null"

y también establecer

 android:drawableLeft="@drawable/selector_you_defined_for_your_checkbox" 

luego en tu código de Java:

 Drawable d = mCheckBox.getCompoundDrawables()[0]; d.setBounds(0, 0, width_you_prefer, height_you_prefer); mCheckBox.setCompoundDrawables(d, null, null, null); 

Funciona para mí y espero que funcione para usted.

yo suelo

android:scaleX="0.70" android:scaleY="0.70"

para ajustar el tamaño de la checkbox

luego establezco márgenes como este

 android:layout_marginLeft="-10dp" 

para ajustar la ubicación de la checkbox.

ACTUALIZACIÓN : esto solo funciona desde API 17 en adelante …


Para agregar a las otras respuestas shinys ya dadas, solo puede hacer que la checkbox sea tan pequeña como lo permita el tamaño del texto.

Según mi respuesta a esta pregunta: ¿ cómo podemos reducir el tamaño de la checkbox por favor dame una idea


CheckBox deriva su altura del TEXTO, así como de la imagen.

Establezca estas propiedades en su XML:

 android:text="" android:textSize="0sp" 

Por supuesto, esto solo funciona si no quieres texto (funcionó para mí).

Sin estos cambios, el CheckBox me estaba dando un gran margen alrededor de mi imagen, como lo menciona Joe

Encontré una manera de hacerlo sin crear tus propias imágenes. En otras palabras, la imagen del sistema se está escalando. No pretendo que la solución sea perfecta; si alguien conoce una forma de acortar algunos de los pasos, estaré encantado de descubrir cómo.

Primero, pongo lo siguiente en la clase de actividad principal del proyecto (WonActivity). Esto fue tomado directamente de Stack Overflow, ¡ gracias chicos !

 /** get the default drawable for the check box */ Drawable getDefaultCheckBoxDrawable() { int resID = 0; if (Build.VERSION.SDK_INT <= 10) { // pre-Honeycomb has a different way of setting the CheckBox button drawable resID = Resources.getSystem().getIdentifier("btn_check", "drawable", "android"); } else { // starting with Honeycomb, retrieve the theme-based indicator as CheckBox button drawable TypedValue value = new TypedValue(); getApplicationContext().getTheme().resolveAttribute(android.R.attr.listChoiceIndicatorMultiple, value, true); resID = value.resourceId; } return getResources().getDrawable(resID); } 

En segundo lugar, creé una clase para "escalar un dibujable". Tenga en cuenta que es completamente diferente del ScaleDrawable estándar.

 import android.graphics.drawable.*; /** The drawable that scales the contained drawable */ public class ScalingDrawable extends LayerDrawable { /** X scale */ float scaleX; /** Y scale */ float scaleY; ScalingDrawable(Drawable d, float scaleX, float scaleY) { super(new Drawable[] { d }); setScale(scaleX, scaleY); } ScalingDrawable(Drawable d, float scale) { this(d, scale, scale); } /** set the scales */ void setScale(float scaleX, float scaleY) { this.scaleX = scaleX; this.scaleY = scaleY; } /** set the scale -- proportional scaling */ void setScale(float scale) { setScale(scale, scale); } // The following is what I wrote this for! @Override public int getIntrinsicWidth() { return (int)(super.getIntrinsicWidth() * scaleX); } @Override public int getIntrinsicHeight() { return (int)(super.getIntrinsicHeight() * scaleY); } } 

Finalmente, definí una clase de checkbox.

 import android.graphics.*; import android.graphics.drawable.Drawable; import android.widget.*; /** A check box that resizes itself */ public class WonCheckBox extends CheckBox { /** the check image */ private ScalingDrawable checkImg; /** original height of the check-box image */ private int origHeight; /** original padding-left */ private int origPadLeft; /** height set by the user directly */ private float height; WonCheckBox() { super(WonActivity.W.getApplicationContext()); setBackgroundColor(Color.TRANSPARENT); // get the original drawable and get its height Drawable origImg = WonActivity.W.getDefaultCheckBoxDrawable(); origHeight = height = origImg.getIntrinsicHeight(); origPadLeft = getPaddingLeft(); // I tried origImg.mutate(), but that fails on Android 2.1 (NullPointerException) checkImg = new ScalingDrawable(origImg, 1); setButtonDrawable(checkImg); } /** set checkbox height in pixels directly */ public void setHeight(int height) { this.height = height; float scale = (float)height / origHeight; checkImg.setScale(scale); // Make sure the text is not overlapping with the image. // This is unnecessary on Android 4.2.2, but very important on previous versions. setPadding((int)(scale * origPadLeft), 0, 0, 0); // call the checkbox's internal setHeight() // (may be unnecessary in your case) super.setHeight(height); } } 

Eso es. Si pone un WonCheckBox en su vista y aplica setHeight (), la imagen del casillero será del tamaño correcto.

usa este código

en el diseño:

  

agregar un nuevo drawable: my_checkbox.xml

     

y al final crea 2 dibujables:

checkbox_off_background.xml

         

y también, checkbox_on_background.xml