Android: Setel margin ke sisi kiri drawable tombol radio

Jan 10 2021

Saya ingin mengatur margin / padding antara radiobutton drawable dan sisi kirinya, misalnya: Menetapkan margin 8dp antara radiobutton drawable dan sisi kiri layar. Saya tahu bagaimana mengatur margin antara radiobutton itu sendiri, tapi tidak bagaimana melakukannya dengan drawable radiobutton. Saya juga tahu cara mengatur margin sisi kanan dari radiobutton drawable dengan paddngStart = "YOUR_PADDING".

Apakah ini mungkin?

Berikut gambaran yang saya maksud:

Saat ini

Apa yang saya inginkan

EDIT

Jawaban tertulis di atas memang berhasil. Bagi mereka yang ingin mengatur nilai di dalam tata letak dan tidak secara terprogram, saya telah menulis adaptor yang mengikat:

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

Anda kemudian dapat menggunakannya di dalam tata letak CustomRadioButton Anda dengan app:setDrawableLeftPadding="@{8f}"

Jawaban

1 mhdwajeeh.95 Jan 10 2021 at 23:20

Jika Anda ingin mencapai hal yang sama persis pada apa yang ditampilkan gambar kedua, Anda dapat menulis kustom RadioButtonyang menangani padding ini, kode tampilan kustom bisa seperti ini (di 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)
    }
}

Anda dapat mengatur nilai padding dengan mengatur nilai field startPadding, misalnya:

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

// or

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