【问题标题】:Android: Set margin to left side of radiobutton drawableAndroid:将边距设置为可绘制单选按钮的左侧
【发布时间】:2021-01-10 15:09:48
【问题描述】:

我想在我的可绘制单选按钮和它的左侧之间设置一个边距/填充,例如:在我的可绘制单选按钮和屏幕左侧之间设置 8dp 的边距。我知道如何在单选按钮本身之间设置边距,但不知道如何使用单选按钮可绘制。我也知道如何使用 paddngStart="YOUR_PADDING" 设置可绘制单选按钮右侧的边距。

这可能吗?

这是我的意思的图片:

目前

我想要什么

编辑

上面的书面答案确实有效。对于那些想在布局中设置值而不是编程的人,我编写了一个绑定适配器:

@BindingAdapter("setDrawableLeftPadding")
fun setDrawableLeftPadding(view: CustomRadioButton, padding: Float) {
    view.setStartPaddingDp(padding)
}

然后你可以在你的 CustomRadioButton 布局中使用它app:setDrawableLeftPadding="@{8f}"

【问题讨论】:

  • @AliAmini 我已经这样做了,第一个答案没用,我无法应用第二个答案,因为我通过 url 获取可绘制对象,因此无法在 inset 内设置任何内容
  • 你试过设置drawable padding吗?见stackoverflow.com/a/6671544/6287910
  • @Cheticamp 是的,我做到了,编写 `android:paddingLeft="20dp" 增加了我的单选按钮可绘制对象和文本之间的填充。但是我想增加我的单选按钮drawable的左侧填充,这不起作用..

标签: android android-layout kotlin android-xml


【解决方案1】:

我想在第二张图片上实现完全相同的效果,您可以编写一个自定义 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

【讨论】:

  • 是否也可以在dp中设置值?因为那样的话这个解决方案对我有用。上面的代码改变了我的 radiobutton.drawable 而不是整个单选按钮的 startpadding 对吗?
  • 当然你可以将你的dp值转换为px,并设置填充。你可以这样做:stackoverflow.com/a/62627706/3375081
  • 请尝试我发布的代码,这样您就可以确定它是否能满足您的需求。
  • 是的,它完全符合我的要求,谢谢。但是用 dp 改变 px 对我有很大帮助。我会接受它作为答案
  • 非常感谢,它成功了。但是你有一个错字,我想你的意思是startPadding = ...而不是startPaddingPx = ...
猜你喜欢
  • 2017-01-29
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多