Android: Setel margin ke sisi kiri drawable tombol radio
Saya ingin mengatur margin / padding antara radiobutton drawable dan sisi kirinya, misalnya: Menetapkan margin 8dp antara radiobutton drawable dan sisi kiri layar. Saya tahu bagaimana mengatur margin antara radiobutton itu sendiri, tapi tidak bagaimana melakukannya dengan drawable radiobutton. Saya juga tahu cara mengatur margin sisi kanan dari radiobutton drawable dengan paddngStart = "YOUR_PADDING".
Apakah ini mungkin?
Berikut gambaran yang saya maksud:
Saat ini
Apa yang saya inginkan
EDIT
Jawaban tertulis di atas memang berhasil. Bagi mereka yang ingin mengatur nilai di dalam tata letak dan tidak secara terprogram, saya telah menulis adaptor yang mengikat:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
Anda kemudian dapat menggunakannya di dalam tata letak CustomRadioButton Anda dengan app:setDrawableLeftPadding="@{8f}"
Jawaban
Jika Anda ingin mencapai hal yang sama persis pada apa yang ditampilkan gambar kedua, Anda dapat menulis kustom RadioButton
yang menangani padding ini, kode tampilan kustom bisa seperti ini (di 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)
}
}
Anda dapat mengatur nilai padding dengan mengatur nilai field startPadding
, misalnya:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP