एंड्रॉइड: रेडियोबूटन ड्रॉबल के बाईं ओर मार्जिन सेट करें
मैं अपने रेडियोबूटन ड्रॉबल और इसके बाईं ओर के बीच एक मार्जिन / पैडिंग सेट करना चाहता हूं, जैसे: मेरे रेडियोबॉटन ड्रॉबल और स्क्रीन के बाईं ओर के बीच 8dp का मार्जिन सेट करना। मुझे पता है कि रेडियोबूटन के बीच एक मार्जिन कैसे सेट करना है, लेकिन रेडियोबॉटन ड्रॉबल के साथ इसे कैसे करना है। मुझे यह भी पता है कि रेडियोबूटन की एक दायीं ओर पैडडैंगस्टार्ट = "Your_PADINGING" के साथ एक मार्जिन सेट करने का तरीका।
क्या यह संभव है?
यहाँ मेरा क्या मतलब है की एक तस्वीर है:
वर्तमान में
मैं क्या चाहता हूँ
संपादित करें
लिखित लिखित उत्तर काम करता है। उन लोगों के लिए जो लेआउट के अंदर मान सेट करना चाहते हैं और प्रोग्रामेटिक रूप से नहीं, मैंने एक बाध्यकारी एडाप्टर लिखा है:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
फिर आप इसे अपने CustomRadioButton लेआउट के साथ उपयोग कर सकते हैं app:setDrawableLeftPadding="@{8f}"
जवाब
मैं आपको वही दिखाना चाहता हूं जो आपकी दूसरी तस्वीर दिखाती है, आप एक कस्टम लिख सकते हैं 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