无法在自定义EditText类中更改背景图像



我有一个自定义的EditTextClass,我使用的所有edittext在我的应用程序-

Class CustomEditText : EditText {
...
}

我想改变背景图像,这样它应该反映在这个CustomEditText的所有用法。

I tried this -

override fun onDraw(canvas: Canvas ? ) {
val d = AppCompatResources.getDrawable(mContext!!, R.drawable.new_drawable)
d?.draw(canvas!!)
super.onDraw(canvas)
}

and this -

fun init(context: Context ? , attrs : AttributeSet ? ) {
background = ResourcesCompat.getDrawable(context!!.getResources(), R.drawable.new_drawable, null)
setBackground(background)
}

两种方法都不行。谁能告诉我正确的解决办法是什么?

绘制时需要将setBounds改为drawable
你应该让你的draw方法像这样

override fun onDraw(canvas: Canvas? ) {
val d = AppCompatResources.getDrawable(context!!, R.drawable.new_drawable)
d?.setBounds(0, 0, width, height)
d?.draw(canvas!!)
super.onDraw(canvas)
}

首先绘制到canvas,然后将canvas传递给parent,这意味着super.onDraw应该位于底部

override fun onDraw(canvas: Canvas ? ) {
val d = AppCompatResources.getDrawable(mContext!!, R.drawable.new_drawable)
d?.draw(canvas!!)
super.onDraw(canvas)
}

在我看来,你应该而不是重写onDraw方法,因为这可能会导致super.onDraw(canvas)在你的操作之前被调用时出现问题(你的drawable可以覆盖文本,点击,可绘制的元素等)。

我已经做了一个演示,它对我很有效:

class CustomEditText : AppCompatEditText {
constructor(context: Context) : super(context) {
init()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context,
             attrs,
             defStyleAttr) {
init()
}
private fun init() {
setBackgroundResource(R.drawable.new_drawable)
}
}

相关内容

  • 没有找到相关文章