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 的左侧和顶部填充不起作用的主要内容,如果未能解决你的问题,请参考以下文章