Android:ラジオボタンドローアブルの左側にマージンを設定します
ラジオボタンドローアブルとその左側の間にマージン/パディングを設定したい。例:ラジオボタンドローアブルと画面の左側の間に8dpのマージンを設定する。ラジオボタン自体の間にマージンを設定する方法は知っていますが、ラジオボタンドローアブルを使用して設定する方法はわかりません。また、paddngStart = "YOUR_PADDING"を使用してラジオボタンドローアブルの右側にマージンを設定する方法も知っています。
これは可能ですか?
ここに私が意味するものの写真があります:
現在
私が欲しいもの
編集
上記の書面による回答は機能します。プログラムではなくレイアウト内で値を設定したい人のために、バインディングアダプターを作成しました。
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
その後、CustomRadioButtonレイアウト内でそれを使用できます。 app:setDrawableLeftPadding="@{8f}"
回答
1 mhdwajeeh.95
2番目の画像が示すものとまったく同じことを実現したいのですが、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