Android: establece el margen en el lado izquierdo del botón de radio que se puede dibujar
Quiero establecer un margen / relleno entre mi botón de radio dibujable y el lado izquierdo, por ejemplo: Establecer un margen de 8dp entre mi botón de radio dibujable y el lado izquierdo de la pantalla. Sé cómo establecer un margen entre el botón de radio en sí, pero no cómo hacerlo con el botón de radio que se puede dibujar. También sé cómo establecer un margen derecho del botón de radio que se puede dibujar con paddngStart = "YOUR_PADDING".
es posible?
Aquí una imagen de lo que quiero decir:
Actualmente
Lo que quiero
EDITAR
La respuesta escrita anterior funciona. Para aquellos que quieran establecer el valor dentro del diseño y no mediante programación, he escrito un adaptador de enlace:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
Luego puede usarlo dentro de su diseño CustomRadioButton con app:setDrawableLeftPadding="@{8f}"
Respuestas
Si desea lograr exactamente lo mismo en lo que muestra su segunda imagen, puede escribir una personalizada RadioButton
que maneje este relleno, el código de vista personalizada puede ser así (en 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)
}
}
Puede establecer el valor de relleno estableciendo el valor del campo startPadding
, por ejemplo:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP