Android:如何更改CheckBox的大小?

我想让checkbox变小一些,我该怎么做?

您只需要设置相关的绘图并将其设置在checkbox中:

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

诀窍在于如何设置drawables。 这里有一个很好的教程 。

从API Level 11开始,还有另外一种方法:

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

这是一个更好的解决scheme,它不会剪裁和/或模糊drawable,但只有当checkbox没有文本本身(但你仍然可以有文本,它只是更复杂,见末尾)。

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

结果:

以前的scaleXscaleY解决scheme看起来像:

您可以在文本checkbox旁边添加一个TextView ,并在父级布局上添加一个点击侦听器,然后以编程方式触发该checkbox。

那么我已经find了很多答案,但他们工作正常,没有文字,当我们需要文本与checkbox就像在我的用户界面 在这里输入图像描述

在这里按照我的用户界面要求,我不能增加TextSize,所以我尝试的其他选项是scaleX和scaleY(Strachcheckbox)和自定义xmlselect器与.png图像(它也创build问题与不同的屏幕大小)

但是我们有另一个解决scheme,那就是Vector Drawable

做3个步骤。

第1步:将Vector Drawable复制到您的可绘制文件夹

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> 

注意,如果你使用Android Studio工作,你也可以在这里添加这些Vector Drawable表单,右键单击你的可绘制文件夹,然后selectNew / Vector Asset,从那里select这些drawable步骤2:为check_box创buildXmlselect器

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> 

第3步:将drawable设置为checkbox

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

现在它的样子:

在这里输入图像描述


你可以改变它的宽度和高度,或者viewportHeight和viewportWidth以及fillColor


希望它会帮助!

这是我做的,第一套:

android:button="@null"

也设置

 android:drawableLeft="@drawable/selector_you_defined_for_your_checkbox" 

那么在你的Java代码中:

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

它适用于我,并希望它会为你工作!

更新 :这只适用于API 17以上…


要添加已经给出的其他精彩的答案,您只能使checkbox小到文本大小允许。

按照我在这个问题上的回答: – 我们如何减小checkbox的大小,请给我一个主意


CheckBox从TEXT和图像派生它的高度。

在XML中设置这些属性:

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

当然,这只有当你不想要文本(为我工作)。

没有这些变化, CheckBox就给了我一个很大的余地,就像Joe所说的那样

我用

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

调整checkbox的大小

然后我设置这样的利润

 android:layout_marginLeft="-10dp" 

调整checkbox的位置。

我find了一种方法来创build自己的图像。 换句话说,系统映像正在缩放。 我不假装解决scheme是完美的; 如果有人知道缩短一些步骤的方法,我会很乐意看到如何。

首先,我将以下内容放在项目的主要活动类(WonActivity)中。 这是直接从堆栈溢出 – 谢谢你们

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

其次,我创build了一个“扩展可绘制的”类。 请注意,它与标准ScaleDrawable完全不同。

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

最后,我定义了一个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); } } 

而已。 如果您在视图中添加WonCheckBox并应用setHeight(),则checkbox图像将具有合适的大小。