Android: Đặt lề sang bên trái của nút radio có thể vẽ

Jan 10 2021

Tôi muốn đặt lề / khoảng đệm giữa nút radio có thể vẽ được và mặt trái của nó, ví dụ: Đặt lề 8dp giữa nút radio có thể vẽ và phía bên trái của màn hình. Tôi biết cách đặt lề giữa chính nút radio, nhưng không biết cách thực hiện với nút radio có thể vẽ được. Tôi cũng biết cách đặt lề bên phải của nút radio có thể vẽ bằng paddngStart = "YOUR_PADDING".

Điều này có khả thi không?

Đây là hình ảnh của ý tôi:

Hiện tại

Những gì tôi muốn

BIÊN TẬP

Câu trả lời bằng văn bản trên tàu không hoạt động. Đối với những người muốn đặt giá trị bên trong bố cục và không theo chương trình, tôi đã viết một bộ điều hợp liên kết:

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

Sau đó, bạn có thể sử dụng nó bên trong bố cục CustomRadioButton của mình với app:setDrawableLeftPadding="@{8f}"

Trả lời

1 mhdwajeeh.95 Jan 10 2021 at 23:20

Tôi muốn bạn đạt được điều tương tự trên những gì hình ảnh thứ hai của bạn hiển thị, bạn có thể viết một tùy chỉnh RadioButtonxử lý phần đệm này, mã chế độ xem tùy chỉnh có thể như thế này (trong 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)
    }
}

Bạn có thể đặt giá trị phần đệm bằng cách đặt giá trị của trường startPadding, ví dụ:

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

// or

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