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

时间:2017-08-11 19:22:26

标签: android layout padding

我想为自定义适配器创建布局。它应该与checkbox,icon和textView一致。

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

<LinearLayout
        android:id="@+id/list_item_row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/checkboxFileSelect"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            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_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/folder_icon"
            android:layout_gravity="center_vertical"/>

        <TextView
            android:id="@+id/current_folder"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="@color/primaryText"/>

    </LinearLayout>

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

示例图片

enter image description here

2 个答案:

答案 0 :(得分:2)

您必须将android:layout_marginLeft用于此用例。

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

保证金是组件外部的空间。例如:屏幕左边缘和组件边框之间的空间

答案 1 :(得分:0)

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

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本身扩展视图。

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