问题描述
我有一个自定义 EditTextClass 用于我的应用程序上的所有 EditTexts -
implementation 'com.afollestad.material-dialogs:core:3.3.0'
我想更改背景图片,以便它应该反映在此 CustomEditText 的所有用法中。
我试过了 -
Class CustomEditText : EditText {
...
}
还有这个 -
override fun onDraw(canvas: Canvas ? ) {
val d = AppCompatResources.getDrawable(mContext!!,R.drawable.new_drawable)
d?.draw(canvas!!)
super.onDraw(canvas)
}
解决方法
drawable 时需要 setBounds
到 drawable
。
所以你应该像这样制作你的draw方法。
override fun onDraw(canvas: Canvas? ) {
val d = AppCompatResources.getDrawable(context!!,R.drawable.new_drawable)
d?.setBounds(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)
}
}