Android: imposta il margine sul lato sinistro del pulsante di opzione disegnabile
Voglio impostare un margine / riempimento tra il mio pulsante di opzione disegnabile e il lato sinistro di esso, ad esempio: Impostazione di un margine di 8dp tra il mio pulsante di opzione disegnabile e il lato sinistro dello schermo. So come impostare un margine tra il radiobutton stesso, ma non come farlo con il radiobutton disegnabile. So anche come impostare un margine sul lato destro del radiobutton disegnabile con paddngStart = "YOUR_PADDING".
È possibile?
Ecco un'immagine di cosa intendo:
Attualmente
Quello che voglio
MODIFICARE
La risposta scritta sopra funziona. Per coloro che vogliono impostare il valore all'interno del layout e non a livello di programmazione, ho scritto un adattatore di associazione:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
Puoi quindi usarlo all'interno del tuo layout CustomRadioButton con app:setDrawableLeftPadding="@{8f}"
Risposte
Se vuoi ottenere lo stesso identico risultato su ciò che mostra la tua seconda immagine, puoi scrivere un custom RadioButton
che gestisca questo riempimento, il codice della visualizzazione personalizzata può essere così (in 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)
}
}
È possibile impostare il valore di riempimento impostando il valore del campo startPadding
, ad esempio:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP