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"/>
结果:
以前的scaleX
和scaleY
解决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图像将具有合适的大小。