使用自定义复选框选择器时,如何消除复选框按钮和文本之间的额外空间?

Posted

技术标签:

【中文标题】使用自定义复选框选择器时,如何消除复选框按钮和文本之间的额外空间?【英文标题】:How can I get rid of extra space between the checkbox button and text when using a custom checkbox selector? 【发布时间】:2012-03-28 22:35:00 【问题描述】:

我有一个非常简单的自定义复选框选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_checked="true" android:drawable="@drawable/ui_checkbox_checked" />
   <item android:drawable="@drawable/ui_checkbox" />
</selector>

我正在使用以下代码进行设置:

<CheckBox android:id="@+id/checkbox1"
   android:layout_
   android:layout_
   android:layout_gravity="center_horizontal"
   android:button="@drawable/checkbox_selector"
   android:textSize="12dp"
   android:text="checkbox 1"
   />

自定义复选框图像比 Android 附带的标准图像小,但文本仍然在完全相同的位置,就好像仍在使用更大的图像一样。

所以不要看起来像[X]_checkbox 1 它看起来像[X]____checkbox 1,框和文本之间有很大的空间。我该如何解决这个问题?

【问题讨论】:

您的问题有什么解决方案吗? 嗨 Micah hainline 你有什么解决办法吗?我面临同样的问题 【参考方案1】:

一种可能的解决方案是将复选框设置为没有文本。然后让自己成为一个 TextView 并使用android:layout_toRightOf="@+id/checkbox1"

可能是不理想的,因为这意味着使用额外的视图,但这是我解决您过去当前面临的问题的方法。

【讨论】:

我过去也这样做过。 :( 它还需要跟踪 TextView 上的触摸并同时选中此复选框。这真的很痛苦! true,看起来你可以通过硬编码java中的填充来做到这一点(来自@Abu第二个链接)仍然可能不理想。如果我是你,我可能会创建一个自定义视图类来处理它 =(。太糟糕了,他们没有添加额外的“间隔”值或其他东西。 @FoamyGuy 好建议,但我认为 TextView 可以通过使用 drawableLeft 变成 CheckBox :)【参考方案2】:

您可以设置android:paddingLeft 属性以避免图像和文本视图之间的额外空间 示例

 <CheckBox android:id="@+id/checkbox1"
   android:layout_
   android:layout_
   android:layout_gravity="center_horizontal"

   android:textSize="12dp"
   android:text="checkbox 1"
   android:paddingLeft="0dip"
   />

【讨论】:

0 在这里不是一个好的值。它必须是按钮宽度 + 文本间距 @Micah,我在这里放 0 仅供参考。有一些情况需要使用0,需要自己计算自己想要多少margin。 我的意思是 paddingLeft 设置文本左侧相对于整个复选框控件左侧的填充。因此 0 将使按钮与文本重叠。按钮宽度是您要放在这里的最小值。【参考方案3】:

控件的大小取决于前景和背景的大小。当您自定义复选框时 - 您制作自定义前景,但背景来自 android。如果您的自定义前景更大,那么 android 的背景就没有问题。如果您使用较小的自定义前景,则复选框的大小是根据系统背景的大小计算的(这不好)。尝试使用小的透明 .png 作为背景:android:background="@drawable/small_bg"(或使用一些 .9.png 进行实验)

【讨论】:

以上是关于使用自定义复选框选择器时,如何消除复选框按钮和文本之间的额外空间?的主要内容,如果未能解决你的问题,请参考以下文章

V-选择多个自定义文本

使用自定义arrayadapter从listview android中删除复选框选择的多个项目

自定义 UITableViewCell 中的 UIButton 导致在多个单元格中选择按钮

如何以适当的类型(文本、复选框、选择等)显示问题? (输入类型 text 和 textarea 没有出现)

自定义单选按钮:如何取消选中? (复选框黑客)[重复]

如何使用react-js以动态形式将复选框值与文本输入绑定?