Pertanyaan Android: Bagaimana cara mengubah ukuran CheckBox?


Saya ingin membuat CheckBox sedikit lebih kecil / lebih besar, bagaimana saya bisa melakukan ini?


75
2018-01-27 23:45


asal


Jawaban:


Anda hanya perlu mengatur drawable terkait dan mengaturnya di kotak centang:

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

Triknya adalah tentang cara mengatur drawable. Berikut tutorial bagus tentang ini.


52
2018-01-28 07:36



Dimulai dengan API Level 11 ada pendekatan lain:

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

113
2018-04-23 20:05



Berikut ini solusi yang lebih baik yang tidak memotong dan / atau mengaburkan gambar yang dapat digambar, tetapi hanya berfungsi jika kotak centang tidak memiliki teks itu sendiri (tetapi Anda masih dapat memiliki teks, itu hanya lebih rumit, lihat di bagian akhir).

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

Hasil:

Apa solusi sebelumnya dengan scaleX dan scaleY tampak seperti:

Anda dapat memiliki kotak centang teks dengan menambahkan TextView di sampingnya dan menambahkan listener klik di tata letak induk, lalu memicu kotak centang secara terprogram.


57
2018-03-17 21:12



Yah saya telah menemukan banyak jawaban, tetapi mereka bekerja dengan baik tanpa teks ketika kami membutuhkan teks juga dengan kotak centang seperti di UI sayaenter image description here 

Di sini sesuai persyaratan UI saya, saya tidak dapat meningkatkan TextSize sehingga pilihan lain yang saya coba adalah scaleX dan scaleY (Strach the check box) dan pemilih xml kustom dengan .png Images (yang juga menciptakan masalah dengan ukuran layar yang berbeda)

Tetapi kami memiliki solusi lain untuk itu, yaitu Vektor Drawable

Lakukan dalam 3 langkah.

Langkah 1: Salinlah di sana. Vector Dapat di-draw ke folder drawable Anda

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>

(Catatan jika Anda workiong dengan Android Studio, Anda juga dapat menambahkan bentuk Drawable Vektor di sana, Klik kanan pada folder drawable Anda kemudian New / Vector Asset, yang memilih ini dapat ditarik dari sana) Langkah 2: Buat pemilih Xml untuk 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>

Langkah 3: Setel itu ditarik ke dalam kotak centang

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

Sekarang ini seperti:

enter image description here


Anda dapat mengubahnya lebar dan tinggi atau viewportHeight dan viewportLebar   dan fillColor juga


Semoga itu akan membantu!


9
2018-06-19 18:34



Inilah yang saya lakukan, set pertama:

android:button="@null" 

dan juga diatur

android:drawableLeft="@drawable/selector_you_defined_for_your_checkbox"

kemudian di kode Java Anda:

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

Ini bekerja untuk saya, dan semoga ini akan bekerja untuk Anda!


6
2018-03-02 13:02



saya menggunakan

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

untuk menyesuaikan ukuran kotak centang

lalu saya menetapkan margin seperti ini

android:layout_marginLeft="-10dp"

untuk menyesuaikan lokasi kotak centang.


5
2017-11-16 08:16



MEMPERBARUI: ini hanya bekerja dari API 17 dan seterusnya ...


Untuk menambah jawaban brilian lainnya yang sudah diberikan, Anda hanya dapat membuat kotak centang sekecil ukuran teks memungkinkan.

Sesuai jawaban saya atas pertanyaan ini:  - bagaimana kita bisa mengurangi ukuran kotak centang tolong beri saya ide


CheckBox menurunkan tinggi badan dari TEXT serta gambar.

Atur properti ini di XML Anda:

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

Tentu saja ini hanya berfungsi jika Anda tidak menginginkan teks (bekerja untuk saya).

Tanpa perubahan ini, CheckBox memberi saya selisih besar di sekitar gambar saya, seperti yang disebutkan oleh Joe


4
2017-12-07 09:59



Saya menemukan cara untuk melakukannya tanpa membuat gambar Anda sendiri. Dengan kata lain, citra sistem sedang diskalakan. Saya tidak berpura-pura bahwa solusinya sempurna; jika ada yang tahu cara untuk mempersingkat beberapa langkah, saya akan senang mengetahui caranya.

Pertama, saya menempatkan hal berikut dalam kelas aktivitas utama proyek (WonActivity). Ini diambil langsung dari Stack Overflow - Terima kasih kawan!

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

Kedua, saya membuat kelas untuk "skala yang dapat digambar". Harap perhatikan bahwa itu benar-benar berbeda dari ScaleDrawable standar.

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

Akhirnya, saya mendefinisikan kelas kotak centang.

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

Itu dia. Jika Anda memasukkan WonCheckBox dalam tampilan Anda dan menerapkan setHeight (), gambar kotak centang akan berukuran tepat.


0
2018-05-13 02:00



gunakan kode ini.

dalam tata letak:

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

tambahkan drawable baru: 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"/>

dan akhiri buat 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"/>

dan juga, 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