Android: ตั้งค่าระยะขอบเป็นด้านซ้ายของปุ่ม radiobton ที่วาดได้

Jan 10 2021

ฉันต้องการกำหนดระยะขอบ / ช่องว่างระหว่างปุ่มกดเรดิโอของฉันกับด้านซ้ายของมันเช่น: ตั้งค่าระยะขอบ 8dp ระหว่างปุ่มเรดิโอของฉันที่ดึงได้และด้านซ้ายของหน้าจอ ฉันรู้วิธีตั้งค่าระยะขอบระหว่างปุ่มเรดิโอเอง แต่ไม่ใช่วิธีที่จะทำอย่างไรกับปุ่มเรดิโอที่เบิกได้ ฉันยังรู้วิธีตั้งค่าระยะขอบด้านขวาของปุ่มเรดิโอที่เบิกได้ด้วย paddngStart = "YOUR_PADDING"

เป็นไปได้หรือไม่?

นี่คือภาพของสิ่งที่ฉันหมายถึง:

ปัจจุบัน

สิ่งที่ฉันต้องการ

แก้ไข

คำตอบที่เป็นลายลักษณ์อักษรข้างต้นใช้งานได้ สำหรับผู้ที่ต้องการตั้งค่าภายในเค้าโครงและไม่ใช่ทางโปรแกรมฉันได้เขียนอะแดปเตอร์ที่มีผลผูกพัน:

@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ที่จัดการช่องว่างภายในนี้โค้ดมุมมองที่กำหนดเองอาจเป็นเช่นนี้(ใน 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)
    }
}

คุณสามารถตั้งค่าการขยายโดยกำหนดค่าของฟิลด์startPaddingตัวอย่างเช่น:

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

// or

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