Android:将边距设置为可绘制单选按钮的左侧
Android: Set margin to left side of radiobutton drawable
我想在我的单选按钮可绘制对象和它的左侧之间设置边距/填充,例如:在我的单选按钮可绘制对象和屏幕左侧之间设置 8dp 的边距。我知道如何在单选按钮本身之间设置边距,但不知道如何使用可绘制的单选按钮来做到这一点。我也知道如何使用 paddngStart="YOUR_PADDING".
设置可绘制的单选按钮右侧的边距
这可能吗?
这是我的意思的图片:
目前
我想要的
编辑
上面的书面回答确实有效。对于那些不想在布局内而不是以编程方式设置值的人,我编写了一个绑定适配器:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
然后您可以在您的 CustomRadioButton 布局中使用它 app:setDrawableLeftPadding="@{8f}"
我想在第二张图片上实现完全相同的效果,您可以编写自定义 RadioButton
来处理此填充,自定义视图代码可以像这样 (in科特林):
import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatRadioButton
class CustomRadioButton : AppCompatRadioButton {
// the value of your padding (in pixels) from the start of the radio button
var startPadding: Int = 0
get
set(value) {
field = value
requestLayout()
}
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
fun setStartPaddingDp(paddingDp: Float) {
startPaddingPx = (paddingDp * context.resources.displayMetrics.density).toInt()
}
override fun onDraw(canvas: Canvas?) {
// todo: handle Right-To-Left layouts
canvas?.translate(startPadding.toFloat(), 0f)
super.onDraw(canvas)
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
setMeasuredDimension(measuredWidth + startPadding, measuredHeight)
}
}
可以通过设置字段startPadding
的值来设置padding值,例如:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP
我想在我的单选按钮可绘制对象和它的左侧之间设置边距/填充,例如:在我的单选按钮可绘制对象和屏幕左侧之间设置 8dp 的边距。我知道如何在单选按钮本身之间设置边距,但不知道如何使用可绘制的单选按钮来做到这一点。我也知道如何使用 paddngStart="YOUR_PADDING".
设置可绘制的单选按钮右侧的边距这可能吗?
这是我的意思的图片:
目前
我想要的
编辑
上面的书面回答确实有效。对于那些不想在布局内而不是以编程方式设置值的人,我编写了一个绑定适配器:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
然后您可以在您的 CustomRadioButton 布局中使用它 app:setDrawableLeftPadding="@{8f}"
我想在第二张图片上实现完全相同的效果,您可以编写自定义 RadioButton
来处理此填充,自定义视图代码可以像这样 (in科特林):
import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatRadioButton
class CustomRadioButton : AppCompatRadioButton {
// the value of your padding (in pixels) from the start of the radio button
var startPadding: Int = 0
get
set(value) {
field = value
requestLayout()
}
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
fun setStartPaddingDp(paddingDp: Float) {
startPaddingPx = (paddingDp * context.resources.displayMetrics.density).toInt()
}
override fun onDraw(canvas: Canvas?) {
// todo: handle Right-To-Left layouts
canvas?.translate(startPadding.toFloat(), 0f)
super.onDraw(canvas)
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
setMeasuredDimension(measuredWidth + startPadding, measuredHeight)
}
}
可以通过设置字段startPadding
的值来设置padding值,例如:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP