无法更改自定义 EditText 中的背景图片 class
Unable to change background image in custom EditText class
我有一个自定义 EditTextClass,我将其用于我应用程序上的所有 EditText -
Class CustomEditText : EditText {
...
}
我想更改背景图片,以便它反映在这个 CustomEditText 的所有用法中。
我试过了 -
override fun onDraw(canvas: Canvas ? ) {
val d = AppCompatResources.getDrawable(mContext!!, R.drawable.new_drawable)
d?.draw(canvas!!)
super.onDraw(canvas)
}
还有这个-
fun init(context: Context ? , attrs : AttributeSet ? ) {
background = ResourcesCompat.getDrawable(context!!.getResources(), R.drawable.new_drawable, null)
setBackground(background)
}
这两种方式,都不行。谁能告诉我正确的解决方案是什么?
首先绘制到 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)
}
绘制drawable时需要setBounds
到drawable
。
所以你应该像这样制作你的绘制方法。
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)
}
在我看来,你应该不覆盖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)
}
}
我有一个自定义 EditTextClass,我将其用于我应用程序上的所有 EditText -
Class CustomEditText : EditText {
...
}
我想更改背景图片,以便它反映在这个 CustomEditText 的所有用法中。
我试过了 -
override fun onDraw(canvas: Canvas ? ) {
val d = AppCompatResources.getDrawable(mContext!!, R.drawable.new_drawable)
d?.draw(canvas!!)
super.onDraw(canvas)
}
还有这个-
fun init(context: Context ? , attrs : AttributeSet ? ) {
background = ResourcesCompat.getDrawable(context!!.getResources(), R.drawable.new_drawable, null)
setBackground(background)
}
这两种方式,都不行。谁能告诉我正确的解决方案是什么?
首先绘制到 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)
}
绘制drawable时需要setBounds
到drawable
。
所以你应该像这样制作你的绘制方法。
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)
}
在我看来,你应该不覆盖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)
}
}