【问题标题】:Unable to set left padding for checkbox无法为复选框设置左填充
【发布时间】:2020-11-19 13:13:36
【问题描述】:

我只是想设置复选框的左右空间,以增加点击区域范围。 不幸的是,当我尝试在 xml 布局中设置 paddingStart 时,它会进行错误的更改并使复选框正确填充。 WTF,Android API 有问题吗?

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">

    <CheckBox
        android:id="@+id/cc_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingStart="16dp"
        android:paddingEnd="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</merge>

Android Studio 预览:

【问题讨论】:

    标签: android android-layout android-constraintlayout android-checkbox


    【解决方案1】:

    Android API 中是否存在错误?

    不是真的。即使您将其设置在左侧,您仍会在右侧看到填充的原因是因为 paddingStart 应用于复选框包含的文本。因此,您无法在框的左侧看到预期的填充。

    只要您使用android:text(不是在框旁边对齐的TextView),单击框或文本将激活该复选框,这意味着它会为您提供您想要的点击区域。

    但是,我想您是指方框左侧的区域。实现这一点的一件事是创建一个新的可绘制资源文件并在复选框的android:drawableStart 中使用它。

    假设您将可绘制文件命名为 checkbox_selector,该文件应如下所示:

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

    然后你需要移除默认框以将上面的选择器应用为可绘制资源。为此:

    android:button="@null"
    

    之后,您需要调用android:drawableStart 以使用您刚刚创建的drawable,并根据需要设置填充。

    android:drawableStart="@drawable/checkbox_selector"
    android:drawablePadding="10dp"
    android:paddingStart="20dp"
    

    最终的代码应该是这样的:

    <CheckBox
        android:id="@+id/cc_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:button="@null"
        android:drawableStart="@drawable/checkbox_selector"
        android:text="@string/app_name"
        android:drawablePadding="10dp"
        android:paddingStart="20dp"
        android:background="@android:color/white"
        tools:ignore="RtlSymmetry" />
    

    【讨论】:

    • 好像没有在android 6上渲染
    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多