Pregunta 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?


75
2018-01-27 23:45


origen


Respuestas:


Solo necesita establecer los productos relacionados y configurarlos en la casilla de verificación:

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="new checkbox" 
    android:background="@drawable/my_checkbox_background"
    android:button="@drawable/my_checkbox" />

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


52
2018-01-28 07:36



Comenzando con API Nivel 11 existe otro enfoque:

<CheckBox
    ...
    android:scaleX="0.70"
    android:scaleY="0.70"
/>

113
2018-04-23 20:05



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

<CheckBox
    android:id="@+id/item_switch"
    android:layout_width="160dp"    <!-- This is the size you want -->
    android:layout_height="160dp"
    android:button="@null"
    android:background="?android:attr/listChoiceIndicatorMultiple"/>

El resultado:

Cuál es la solución anterior con scaleX y scaleY parecía:

Puede tener una casilla de texto al agregar un TextView al lado y agregar un oyente de clic en el diseño principal, luego activando la casilla de verificación programáticamente.


57
2018-03-17 21:12



Bueno, he encontrado muchas respuestas, pero funcionan bien sin texto cuando requerimos texto también con casilla de verificación como en mi interfaz de usuarioenter image description here 

Aquí, según mi requisito de UI, no puedo aumentar TextSize así que otras opciones que probé son scaleX y scaleY (Ponga la casilla de verificación) 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, eso es Vector extraíble

Hazlo en 3 pasos.

Paso 1: Copie allí Vector Drawable a su carpeta dibujable

checked.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
    android:fillColor="#FF000000"
    android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" />
</vector>

un_checked.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
    android:fillColor="#FF000000"
    android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z" />
</vector>

(Tenga en cuenta que si está trabajando 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 Nuevo / Vector activo, que seleccione estos dibujables desde allí.) Paso 2: Crear selector Xml para check_box

check_box_selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checked" android:state_checked="true" />
<item android:drawable="@drawable/un_checked" />
</selector>

Paso 3: Establecer ese dibujable en la casilla de verificación

<CheckBox
android:id="@+id/suggectionNeverAskAgainCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:button="@drawable/check_box_selector"
android:textColor="#FF000000"
android:textSize="13dp"
android:text="  Never show this alert again" />

Ahora es como:

enter image description here


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


Espero que ayude!


9
2018-06-19 18:34



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.


6
2018-03-02 13:02



yo suelo

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

para ajustar el tamaño de la casilla de verificación

luego establezco márgenes como este

android:layout_marginLeft="-10dp"

para ajustar la ubicación de la casilla de verificación.


5
2017-11-16 08:16



ACTUALIZAR: esto solo funciona desde API 17 en adelante ...


Para agregar a las otras respuestas brillantes ya dadas, solo puede hacer que la casilla de verificación 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 casilla de verificación 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 mencionó Joe


4
2017-12-07 09:59



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 casilla de verificación.

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.


0
2018-05-13 02:00



usa este código

en el diseño:

<CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/my_checkbox"  *** here
        android:checked="true"/>

agregar un nuevo drawable: my_checkbox.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:state_checked="false"
    android:drawable="@drawable/checkbox_off_background"/>

<item
    android:state_checked="true"
    android:drawable="@drawable/checkbox_on_background"/>

y al final crea 2 dibujables:

checkbox_off_background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle">
        <size
            android:height="25dp"   *** your size
            android:width="25dp"/>
    </shape>
</item>

<item android:drawable="@android:drawable/checkbox_off_background"/>

y también, checkbox_on_background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle">
        <size
            android:height="25dp"
            android:width="25dp"/>
    </shape>
</item>

<item android:drawable="@android:drawable/checkbox_on_background"/>


0
2017-11-19 03:51