无法在 EditText 文本下方绘制形状矩形、路径...
Cannot draw shapes Rectangles, Paths... below EditText text
我想在 TextView 和 EditText 的文本值下方绘制矩形、圆形、路径、三角形等形状。因此,我覆盖了 onDraw() 方法,并在将背景颜色设置为绿色后绘制简单的蓝色矩形来对其进行测试。我知道我不应该在 onDraw() 方法中初始化对象(Paint 对象),但它仅用于测试。以下是完整代码:
class Test : AppCompatEditText {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun onDraw(canvas: Canvas) {
setBackgroundColor(Color.GREEN)
canvas.drawRect(0f, 0f, 150f, 50f, Paint().apply {
isAntiAlias = true
color = Color.BLUE
style = Paint.Style.FILL
})
super.onDraw(canvas)
}
}
然后使用xml
初始化它
<com.slaviboy.galaxy.Test
android:id="@+id/ssss"
android:layout_width="150dp"
android:layout_height="50dp"
android:gravity="center"
android:text="TEST"
android:imeOptions="actionDone"
android:inputType="number"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
这是最终结果
上次我使用类似的代码我记得它特别适用于 EditText!
- 我在所有视图下方使用 GLSurfaceView 绘制了一个 OpenGL 场景,所以我认为这是造成它的原因,所以我删除了它,但问题仍然存在。
- 然后我将类型从 EditText 更改为简单 View,它开始按预期工作。所以它表明这是仅当我使用EditText和TextView时出现的问题。
- 所以我开始从 xml 初始化中删除属性,特别是属性 inputType
因此,一旦我删除了 inputType 属性,代码就会按预期开始工作,
android:inputType="number"
知道为什么会导致视图丢失所有绘图吗?
是否有解决方法?
我知道我可以使用属性 digits 来限制允许的字母,但是有没有办法将键盘样式保持为数字?
android:digits="0123456789."
您遇到的问题与以下问题有关:。您可以通读已接受的答案,但最重要的是 TextView 内部滚动已关闭,因此即使您正在绘图,它也会滚出视图。快速解决方案是将水平滚动设置为 false
.
class MyEditText : androidx.appcompat.widget.AppCompatEditText{
...
init {
setHorizontallyScrolling(false)
}
...
}
这样做可能会产生意想不到的后果,但是,如果 TextView 没有做任何花哨的事情,我想你会没事的。答案中还提到了其他修复,例如捕获滚动和向后滚动可能更安全。
我想在 TextView 和 EditText 的文本值下方绘制矩形、圆形、路径、三角形等形状。因此,我覆盖了 onDraw() 方法,并在将背景颜色设置为绿色后绘制简单的蓝色矩形来对其进行测试。我知道我不应该在 onDraw() 方法中初始化对象(Paint 对象),但它仅用于测试。以下是完整代码:
class Test : AppCompatEditText {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun onDraw(canvas: Canvas) {
setBackgroundColor(Color.GREEN)
canvas.drawRect(0f, 0f, 150f, 50f, Paint().apply {
isAntiAlias = true
color = Color.BLUE
style = Paint.Style.FILL
})
super.onDraw(canvas)
}
}
然后使用xml
初始化它 <com.slaviboy.galaxy.Test
android:id="@+id/ssss"
android:layout_width="150dp"
android:layout_height="50dp"
android:gravity="center"
android:text="TEST"
android:imeOptions="actionDone"
android:inputType="number"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
这是最终结果
上次我使用类似的代码我记得它特别适用于 EditText!
- 我在所有视图下方使用 GLSurfaceView 绘制了一个 OpenGL 场景,所以我认为这是造成它的原因,所以我删除了它,但问题仍然存在。
- 然后我将类型从 EditText 更改为简单 View,它开始按预期工作。所以它表明这是仅当我使用EditText和TextView时出现的问题。
- 所以我开始从 xml 初始化中删除属性,特别是属性 inputType
因此,一旦我删除了 inputType 属性,代码就会按预期开始工作,
android:inputType="number"
知道为什么会导致视图丢失所有绘图吗? 是否有解决方法?
我知道我可以使用属性 digits 来限制允许的字母,但是有没有办法将键盘样式保持为数字?
android:digits="0123456789."
您遇到的问题与以下问题有关:false
.
class MyEditText : androidx.appcompat.widget.AppCompatEditText{
...
init {
setHorizontallyScrolling(false)
}
...
}
这样做可能会产生意想不到的后果,但是,如果 TextView 没有做任何花哨的事情,我想你会没事的。答案中还提到了其他修复,例如捕获滚动和向后滚动可能更安全。