Android: Đặt lề sang bên trái của nút radio có thể vẽ
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
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 RadioButton
xử 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