通过setInputType()设置输入类型后,自定义EditText无法正常工作。

10

我创建了一个自定义的EditText,并重写了它的onDraw()函数。一切都运行良好(我可以在EditText内绘制任何东西),直到我想要更改这个EditText的输入方法并调用了这个函数:

setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
无论我何时何地调用它:在它被调用后,我的自定义EditText消失了,只有原始的EditText显示出来,尽管我的重写onDraw()函数,并在其中调用它的超级函数(无论我在哪里调用它)。
我还尝试了一些帖子中建议的透明颜色设置:setBackgroundColor(Color.TRANSPARENT)在基类上,还有onDraw()函数中我的Paint对象的paint.setColor(0x80FF0000),但它们没有效果。
编辑: 我发现问题不在于设置输入类型,而是同时设置EditText的输入类型和重力。
setGravity(Gravity.CENTER_HORIZONTAL);
如果它们中的任何一个未设置,我的自定义视图就会按预期绘制。而且(更奇怪的是):使用Gravity.CENTER_VERTICAL没有问题,只有Gravity.CENTER_HORIZONTALGravity.CENTER才会出现问题。
这两个设置似乎是互斥的。这可能是可能的吗?

你在哪里调用它?你是在activity的onCreate方法中调用它吗? - user1406716
我在我的自定义类构造函数中调用这些setter函数,该类扩展了EditText(尽管我尝试过在构造函数中设置它们之一并从按钮的onClickListener设置另一个,但结果是相同的:当我单击按钮时,“我的绘画”消失了)。 - meztelentsiga
非常感谢您的编辑。它救了我的命.. :D - vikoo
4个回答

5

检查你的getScrollX()值。我敢打赌你会看到像1000000像素这样的值。EditText以一种奇怪的方式转换它的画布,所以即使你实际上在其上绘图,它也偏离可见剪辑。

解决方法是将scrollX值添加到你的绘图坐标中。


谢谢!我花了几个小时努力寻找为什么将“numberDecimal”添加到输入类型会破坏我的onDraw()中的所有绘画。通过观察clipRect()设置为一些奇怪的x平移,我已经接近解决问题,但还是没有想到。有时候开发Android就像生活在侦探小说中 :) - dimsuz
对于塔塔酱神来说,你是如何发现getScrollX()是问题的根源的? - DeckyFx

2

感谢@simekadam的回答,我终于成功修复了。以下是我修复的方法,以防您没有理解清楚。

override fun onDraw(canvas: Canvas) {        
    super.onDraw(canvas)
    canvas.translate(scrollX.toFloat(), 0f)
    // do your drawing
}

0

您必须在xml中设置android:digits="0123456789"。但我不知道为什么...


0

getScrollX()解决了我的问题

   @Override
    protected void onDraw(Canvas canvas) {
        Paint p = new Paint();
        p.setColor(Color.RED);
        canvas.drawLine(0f+getScrollX(), 20f, 200f+getScrollX(), 30f, p);       
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接