Frage Android: Wie ändere ich CheckBox-Größe?


Ich möchte CheckBox etwas kleiner / größer machen, wie kann ich das machen?


75
2018-01-27 23:45


Ursprung


Antworten:


Sie müssen nur die zugehörigen Zeichenelemente festlegen und sie im Kontrollkästchen festlegen:

<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" />

Der Trick besteht darin, wie Sie die Zeichen festlegen. Hier ist ein gutes Tutorial dazu.


52
2018-01-28 07:36



Ab API Level 11 gibt es einen weiteren Ansatz:

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

113
2018-04-23 20:05



Hier ist eine bessere Lösung, die das Zeichen nicht abschneidet und / oder verwischt, sondern nur funktioniert, wenn das Kontrollkästchen selbst keinen Text hat (aber Sie können immer noch Text haben, es ist nur komplizierter, siehe am Ende).

<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"/>

Das Ergebnis:

Was die vorherige Lösung mit scaleX und scaleY sah aus wie:

Sie können ein Kontrollkästchen für Text verwenden, indem Sie ein hinzufügen TextView neben ihm und Hinzufügen eines Klick-Listeners auf dem übergeordneten Layout, dann das Kontrollkästchen programmgesteuert auslösen.


57
2018-03-17 21:12



Nun, ich habe viele Antworten gefunden, aber sie funktionieren gut ohne Text, wenn wir Text auch mit Kontrollkästchen wie in meiner Benutzeroberfläche benötigenenter image description here 

Hier gemäß meiner UI-Anforderung kann ich TextSize nicht erhöhen, so dass andere Optionen, die ich ausprobiert habe, scaleX und scaleY (Strach das Kontrollkästchen) und benutzerdefinierte XML-Selektor mit .png Images sind (verursacht auch Probleme mit unterschiedlicher Bildschirmgröße)

Aber dafür haben wir eine andere Lösung Vektor ausziehbar

Mach es in 3 Schritten.

Schritt 1: Kopieren Sie dort Vector Drawable in Ihren aufklappbaren Ordner

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>

(Hinweis: Wenn Sie mit Android Studio arbeiten, können Sie diese Vektor-Zeichnungsform auch dort hinzufügen. Klicken Sie mit der rechten Maustaste auf Ihren zeichnungsfähigen Ordner und dann auf Neu / Vektor-Asset, um diese von dort aus zu zeichnen) Schritt 2: Erstellen Sie den Xml-Selektor für 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>

Schritt 3: Setzen Sie dieses Zeichenfeld in das Kontrollkästchen

<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" />

Jetzt ist es wie:

enter image description here


Sie können die Breite und Höhe oder viewportHeight und viewportWidth ändern   und fillColor auch


Hoffe es wird helfen!


9
2018-06-19 18:34



Hier war, was ich getan habe, zuerst gesetzt:

android:button="@null" 

und auch eingestellt

android:drawableLeft="@drawable/selector_you_defined_for_your_checkbox"

dann in deinem Java-Code:

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

Es funktioniert für mich, und hoffentlich wird es für dich arbeiten!


6
2018-03-02 13:02



ich benutze

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

um die Größe der Checkbox anzupassen

dann setze ich Ränder wie diese

android:layout_marginLeft="-10dp"

um die Position des Kontrollkästchens anzupassen.


5
2017-11-16 08:16



AKTUALISIEREN: das funktioniert nur ab API 17 ...


Um zu den anderen brillanten Antworten, die bereits angegeben wurden, hinzuzufügen, können Sie das Kontrollkästchen nur so klein machen, wie es die Textgröße zulässt.

Laut meiner Antwort zu dieser Frage:  - Wie können wir die Größe der Checkbox reduzieren, bitte geben Sie mir eine Idee


CheckBox leitet seine Höhe sowohl vom TEXT als auch vom Bild ab.

Legen Sie diese Eigenschaften in Ihrem XML fest:

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

Das funktioniert natürlich nur, wenn du keinen Text willst (funktioniert für mich).

Ohne diese Änderungen, die CheckBox gab mir einen großen Rand um mein Bild, wie von Joe erwähnt


4
2017-12-07 09:59



Ich habe einen Weg gefunden, das zu tun, ohne eigene Bilder zu erstellen. Mit anderen Worten, das Systembild wird skaliert. Ich behaupte nicht, dass die Lösung perfekt ist; Wenn jemand einen Weg kennt, um einige der Schritte zu verkürzen, werde ich gerne herausfinden, wie.

Zuerst lege ich Folgendes in die Hauptaktivitätsklasse des Projekts (WonActivity). Dies wurde direkt von Stack Overflow übernommen - Danke Jungs!

/** 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);
}

Zweitens habe ich eine Klasse erstellt, um "Drawable" zu skalieren. Bitte beachten Sie, dass es sich vom Standard ScaleDrawable völlig unterscheidet.

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);
  }
}

Schließlich habe ich eine Checkbox-Klasse definiert.

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);
  }
}

Das ist es. Wenn Sie eine WonCheckBox in Ihre Ansicht einfügen und setHeight () anwenden, hat das Kontrollkästchenbild die richtige Größe.


0
2018-05-13 02:00



benutze diesen Code.

im Layout:

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

Fügen Sie ein neues Zeichenfeld hinzu: 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"/>

und end create 2 drawable:

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"/>

und auch 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