如何删除 Android Checkbox 的内部图像填充(顶部、左侧和底部)

Posted

技术标签:

【中文标题】如何删除 Android Checkbox 的内部图像填充(顶部、左侧和底部)【英文标题】:How to remove internal Image padding (Top, Left and Bottom) of an Android Checkbox 【发布时间】:2014-09-17 00:21:49 【问题描述】:

我在 android 中有一个 Checkbox,上面有一个 TextView:

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:padding="@dimen/default_margin">

    <TextView
        android:id="@+id/tv_edit_checkbox"
        android:layout_
        android:layout_
        android:singleLine="false"
        android:layout_margin="0dp"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/edit_checkbox" />

    <CheckBox
        android:id="@+id/cb_edit"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:checked="true" />

</LinearLayout>

但是,Checkbox 的问题在于它的内部“图像”周围有一个不可见的边框。如何删除这个?我试过android:padding="-5dp",但由于某种原因,这只适用于复选框的右侧,而不是顶部、左侧和底部(我主要关心的是顶部)。

这里是 Eclipse Graphical Layout 窗口中 Checkbox 的截图:

LineairLayout 已选中:复选框已选中:

在第二张图片中,您可以看到选中复选框时,它周围有一些填充。我想把它去掉(特别是在顶部),这样 Text 和 Checkbox 之间的空间就会减少。

这是我有 padding="-5dp" 时的图片:

复选框已选中:

PS:如果有人知道只有一个复选框并且它是文本字段的解决方案,那么我可以删除 LineairLayout 和 TextView,同时仍然在复选框上方保留文本,我也将不胜感激。具有自定义样式和 Text 的单个 Checkbox 比具有附加 TextView 的 LineairLayout 中的 Checkbox 更好。 (我知道这更多的是针对不同的问题,但我只是在此处添加它,因为它没有太多优先级。一切都在工作,除了复选框的填充。)

【问题讨论】:

无需更改布局。您也可以在 LinearLayout 中获得此视图。请参阅我对您的答案的编辑 @Manishika 是的,LineairLayout 权重。感谢您的编辑。如果有人遇到同样的问题,他们可以选择其中一种解决方案。 【参考方案1】:

好的,我将 LineairLayout 更改为 RelativeLayout,然后我可以将边距更改为负 dp。这是我的最终结果:

<RelativeLayout
    android:layout_
    android:layout_
    android:padding="@dimen/default_margin">

    <TextView
        android:id="@+id/tv_edit_checkbox"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:singleLine="false"
        android:gravity="center_horizontal"
        android:text="@string/edit_checkbox" />

    <CheckBox
        android:id="@+id/cb_edit"
        android:layout_
        android:layout_
        android:layout_below="@id/tv_edit_checkbox"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="-10dp"
        android:checked="true" />

</RelativeLayout>

这给出了以下结果:

已选择相对布局:

这确实改变了文本和复选框之间的空间。对我来说,这就是我想要的,但是它仍然不能解释为什么 Android Checkbox 的内部图像在其顶部、左侧和底部都有一个填充。现在知道 Android 的谁有这个想法,但它是一个非常糟糕的一.. 最好在内部图像上不使用填充,然后有一些默认的内部边距/填充,用户可以更改..

编辑: 您也可以使用LinearLayout 获得相同的结果:

<LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical" >

        <TextView
            android:layout_
            android:layout_
            android:gravity="center_horizontal"
            android:padding="0dp"
            android:text="For all products"
            android:textSize="10sp" />

        <CheckBox
            android:id="@+id/checkBox_id"
            android:layout_
            android:layout_
            android:layout_marginTop="-10dp"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            android:padding="0dp" />
    </LinearLayout>

【讨论】:

以上是关于如何删除 Android Checkbox 的内部图像填充(顶部、左侧和底部)的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Android CheckBox 周围的填充

android中如何获得listview中的checkbox的值?

Android CheckBox修改选中状态框内部颜色及样式

Android如何在CheckBox检查事件后更新RecyclerView内TextView的文本样式

Android高级控件——ListView绑定CheckBox实现全选,添加和删除等功能

如何删除android中的内部存储文件?