Android: ตั้งค่าระยะขอบเป็นด้านซ้ายของปุ่ม radiobton ที่วาดได้
ฉันต้องการกำหนดระยะขอบ / ช่องว่างระหว่างปุ่มกดเรดิโอของฉันกับด้านซ้ายของมันเช่น: ตั้งค่าระยะขอบ 8dp ระหว่างปุ่มเรดิโอของฉันที่ดึงได้และด้านซ้ายของหน้าจอ ฉันรู้วิธีตั้งค่าระยะขอบระหว่างปุ่มเรดิโอเอง แต่ไม่ใช่วิธีที่จะทำอย่างไรกับปุ่มเรดิโอที่เบิกได้ ฉันยังรู้วิธีตั้งค่าระยะขอบด้านขวาของปุ่มเรดิโอที่เบิกได้ด้วย paddngStart = "YOUR_PADDING"
เป็นไปได้หรือไม่?
นี่คือภาพของสิ่งที่ฉันหมายถึง:
ปัจจุบัน
สิ่งที่ฉันต้องการ
แก้ไข
คำตอบที่เป็นลายลักษณ์อักษรข้างต้นใช้งานได้ สำหรับผู้ที่ต้องการตั้งค่าภายในเค้าโครงและไม่ใช่ทางโปรแกรมฉันได้เขียนอะแดปเตอร์ที่มีผลผูกพัน:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
จากนั้นคุณสามารถใช้มันภายในเลย์เอาต์ CustomRadioButton ของคุณด้วยไฟล์ app:setDrawableLeftPadding="@{8f}"
คำตอบ
ฉันต้องการบรรลุสิ่งเดียวกันกับสิ่งที่รูปภาพที่สองของคุณแสดงคุณสามารถเขียนแบบกำหนดเอง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