एंड्रॉइड: रेडियोबूटन ड्रॉबल के बाईं ओर मार्जिन सेट करें

Jan 10 2021

मैं अपने रेडियोबूटन ड्रॉबल और इसके बाईं ओर के बीच एक मार्जिन / पैडिंग सेट करना चाहता हूं, जैसे: मेरे रेडियोबॉटन ड्रॉबल और स्क्रीन के बाईं ओर के बीच 8dp का मार्जिन सेट करना। मुझे पता है कि रेडियोबूटन के बीच एक मार्जिन कैसे सेट करना है, लेकिन रेडियोबॉटन ड्रॉबल के साथ इसे कैसे करना है। मुझे यह भी पता है कि रेडियोबूटन की एक दायीं ओर पैडडैंगस्टार्ट = "Your_PADINGING" के साथ एक मार्जिन सेट करने का तरीका।

क्या यह संभव है?

यहाँ मेरा क्या मतलब है की एक तस्वीर है:

वर्तमान में

मैं क्या चाहता हूँ

संपादित करें

लिखित लिखित उत्तर काम करता है। उन लोगों के लिए जो लेआउट के अंदर मान सेट करना चाहते हैं और प्रोग्रामेटिक रूप से नहीं, मैंने एक बाध्यकारी एडाप्टर लिखा है:

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

फिर आप इसे अपने CustomRadioButton लेआउट के साथ उपयोग कर सकते हैं app:setDrawableLeftPadding="@{8f}"

जवाब

1 mhdwajeeh.95 Jan 10 2021 at 23:20

मैं आपको वही दिखाना चाहता हूं जो आपकी दूसरी तस्वीर दिखाती है, आप एक कस्टम लिख सकते हैं RadioButtonजो इस पैडिंग को संभालता है, कस्टम व्यू कोड इस तरह हो सकता है (कोटलिन में) :

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)
    }
}

startPaddingउदाहरण के लिए, आप फ़ील्ड का मान सेट करके पैडिंग मान सेट कर सकते हैं :

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

// or

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