Android: Stellen Sie den Rand auf die linke Seite des Radiobutton-Zeichens ein

Jan 10 2021

Ich möchte einen Rand / Abstand zwischen meinem zeichnbaren Radiobutton und der linken Seite festlegen, z. B.: Einen Abstand von 8 dp zwischen meinem zeichnbaren Radiobutton und der linken Seite des Bildschirms festlegen. Ich weiß, wie man einen Abstand zwischen dem Radiobutton selbst einstellt, aber nicht, wie man es mit dem ausziehbaren Radiobutton macht. Ich weiß auch, wie man mit paddngStart = "YOUR_PADDING" einen Rand rechts neben dem Radiobutton zeichnet, der gezeichnet werden kann.

Ist das möglich?

Hier ein Bild von dem, was ich meine:

Zur Zeit

Was ich will

BEARBEITEN

Die oben genannte schriftliche Antwort funktioniert. Für diejenigen, die den Wert innerhalb des Layouts und nicht programmgesteuert festlegen möchten, habe ich einen Bindungsadapter geschrieben:

@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
    view.setStartPaddingDp(padding)
}

Sie können es dann in Ihrem CustomRadioButton-Layout mit verwenden app:setDrawableLeftPadding="@{8f}"

Antworten

1 mhdwajeeh.95 Jan 10 2021 at 23:20

Wenn Sie genau das Gleiche erreichen möchten, was Ihr zweites Bild zeigt, können Sie eine benutzerdefinierte RadioButtonDatei schreiben , die diese Auffüllung behandelt. Der benutzerdefinierte Ansichtscode kann wie folgt aussehen (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)
    }
}

Sie können den Füllwert festlegen, indem Sie den Wert des Felds festlegen startPadding, zum Beispiel:

yourCustomRadioButton.startPadding = 100 // this value is in pixels

// or

yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP