Android: Stellen Sie den Rand auf die linke Seite des Radiobutton-Zeichens ein
Ich möchte einen Rand / Abstand zwischen meinem zeichnbaren Radiobutton und der linken Seite festlegen, z. B.: Einen Abstand von 8 dp zwischen meinem zeichnbaren Radiobutton und der linken Seite des Bildschirms festlegen. Ich weiß, wie man einen Abstand zwischen dem Radiobutton selbst einstellt, aber nicht, wie man es mit dem ausziehbaren Radiobutton macht. Ich weiß auch, wie man mit paddngStart = "YOUR_PADDING" einen Rand rechts neben dem Radiobutton zeichnet, der gezeichnet werden kann.
Ist das möglich?
Hier ein Bild von dem, was ich meine:
Zur Zeit

Was ich will

BEARBEITEN
Die oben genannte schriftliche Antwort funktioniert. Für diejenigen, die den Wert innerhalb des Layouts und nicht programmgesteuert festlegen möchten, habe ich einen Bindungsadapter geschrieben:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
Sie können es dann in Ihrem CustomRadioButton-Layout mit verwenden app:setDrawableLeftPadding="@{8f}"
Antworten
Wenn Sie genau das Gleiche erreichen möchten, was Ihr zweites Bild zeigt, können Sie eine benutzerdefinierte RadioButton
Datei schreiben , die diese Auffüllung behandelt. Der benutzerdefinierte Ansichtscode kann wie folgt aussehen (in 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)
}
}
Sie können den Füllwert festlegen, indem Sie den Wert des Felds festlegen startPadding
, zum Beispiel:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP