CheckBox 的左侧和顶部填充不起作用

Posted

技术标签:

【中文标题】CheckBox 的左侧和顶部填充不起作用【英文标题】:Left and top padding for CheckBox doesn't work 【发布时间】:2018-01-20 09:34:12 【问题描述】:

我想为自定义适配器创建布局。它应该与复选框、图标和文本视图一致。

我对行使用下一个布局 xml 配置:

<LinearLayout
        android:id="@+id/list_item_row"
        android:layout_
        android:layout_
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/checkboxFileSelect"
            android:layout_
            android:layout_
            android:layout_gravity="center_vertical"
            android:button="@drawable/checkbox_icon"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:checked="false"
            android:visibility="visible"/>

        <ImageView
            android:id="@+id/folder_icon"
            android:layout_
            android:layout_
            android:src="@drawable/folder_icon"
            android:layout_gravity="center_vertical"/>

        <TextView
            android:id="@+id/current_folder"
            android:layout_
            android:layout_
            android:layout_gravity="center_vertical"
            android:textColor="@color/primaryText"/>

    </LinearLayout>

但左侧和顶部填充不起作用。当我添加左右填充时,它只会增加右填充值。

此处为示例图片

【问题讨论】:

【参考方案1】:

对于此用例,您必须使用 android:layout_marginLeft

填充是组件内部的空间。例如:文本和 TextView 边框之间的空间。

边距是组件外的空间。例如:屏幕左边缘和组件边框之间的空间

【讨论】:

感谢您这么快的回复。 问题是边距会使复选框的“边距区域”不可点击。我需要它可点击,因此想使用填充,但它根本不移动复选框。【参考方案2】:

聚会有点晚了,但这里有一个解决方案,适合任何寻求方法的人。由于您无法在不添加边距的情况下移动复选框本身,因此您可以覆盖该类:

class PaddedCheckBox @JvmOverloads constructor(
        context: Context,
        attrs: AttributeSet? = null,
        defStyle: Int = android.R.attr.checkboxStyle,
) : MaterialCheckBox(context, attrs, defStyle) 
    override fun onDraw(canvas: Canvas) 
        val rtlCoefficient = if (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL) -1 else 1
        canvas.save()
        canvas.translate(rtlCoefficient * 40f, 0f)
        super.onDraw(canvas)
        canvas.restore()
    

如果您不使用材质组件,您可以从AppComptCheckBox 本身扩展您的视图。

注意:考虑在复选框中添加过多的填充端以补偿画布平移。

【讨论】:

以上是关于CheckBox 的左侧和顶部填充不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 IE7 中,表格左侧的填充不起作用

填充顶部在 ionic 3 中不起作用

左右引导填充不起作用

当我最初在 java 或 Kotlin 中设置时,CheckBox 的 isChecked 不起作用

左侧的粘性位置在 React 应用程序中不起作用

按钮的填充在没有背景的情况下不起作用