Android: установите маржу слева от радиообмена.
Я хочу установить поле / отступ между моим выводимым радиокнопкой и его левой стороной, например: Установка поля 8dp между моим выводимым радиокнопкой и левой стороной экрана. Я знаю, как установить запас между самим радиокнопкой, но не знаю, как сделать это с возможностью рисования радиокнопки. Я также знаю, как установить поле справа от радиокнопки, которое можно рисовать с помощью paddngStart = "YOUR_PADDING".
Это возможно?
Вот картина того, что я имею в виду:
В настоящее время

Что я хочу

РЕДАКТИРОВАТЬ
Приведенный выше письменный ответ действительно работает. Для тех, кто хочет установить значение внутри макета, а не программно, я написал адаптер привязки:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
Затем вы можете использовать его в макете CustomRadioButton с помощью app:setDrawableLeftPadding="@{8f}"
Ответы
Если вы хотите добиться того же, что и на втором изображении, вы можете написать RadioButton
пользовательский код, который обрабатывает это заполнение, код пользовательского представления может быть таким (в Kotlin) :
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
, например:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP