Android: defina a margem para o lado esquerdo do drawable do botão de opção
Desejo definir uma margem / preenchimento entre meu drawable de botão de rádio e o lado esquerdo dele, por exemplo: Definir uma margem de 8 dp entre meu drawable de botão de rádio e o lado esquerdo da tela. Eu sei como definir uma margem entre o botão de rádio propriamente dito, mas não como fazer isso com o drawable do botão de rádio. Eu também sei como definir uma margem do lado direito do drawable do botão de rádio com paddngStart = "YOUR_PADDING".
Isso é possível?
Aqui está uma imagem do que quero dizer:
Atualmente
O que eu quero
EDITAR
A resposta escrita aboven funciona. Para aqueles que desejam definir o valor dentro do layout e não de forma programática, escrevi um adaptador de ligação:
@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
view.setStartPaddingDp(padding)
}
Você pode então usá-lo dentro de seu layout CustomRadioButton com app:setDrawableLeftPadding="@{8f}"
Respostas
Se você deseja obter exatamente o mesmo no que sua segunda imagem mostra, você pode escrever um personalizado RadioButton
que lide com esse preenchimento, o código de visualização personalizada pode ser assim (em 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)
}
}
Você pode definir o valor de preenchimento definindo o valor do campo startPadding
, por exemplo:
yourCustomRadioButton.startPadding = 100 // this value is in pixels
// or
yourCustomRadioButton.setStartPaddingDp(100) // this value is in DP