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

时间:2014-05-09 12:25:48

标签: android android-edittext android-custom-view android-inputtype

我已创建自定义EditText,并已覆盖其onDraw()个功能。一切都运行正常(我可以在EditText中绘制任何内容),直到我想更改此EditText的输入方法并调用此函数:

setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

无论我何时何地调用它:在调用它之后,我的自定义EditText消失了,只显示了原始的EditText,尽管我已覆盖onDraw()功能,并且在它内部,要么调用它的超级函数(无论我在哪里调用它)。

我也试过在这里的一些帖子中建议使用透明色: 基类上的setBackgroundColor(Color.TRANSPARENT),也是 对paint.setColor(0x80FF0000)函数中的Paint对象onDraw() 但它们没有效果。

编辑: 我发现问题不在于设置输入类型,而是同时设置EditText的输入类型和重力:

setGravity(Gravity.CENTER_HORIZONTAL);

如果未设置其中任何一个,我的自定义视图将按预期绘制。另外(更奇怪的是):Gravity.CENTER_VERTICAL只有Gravity.CENTER_HORIZONTALGravity.CENTER没有问题。

似乎这两个设置是互斥的。这有可能吗?

4 个答案:

答案 0 :(得分:5)

检查您的getScrollX()值。我打赌你会看到1000000像素的值。 EditText以这种奇怪的方式翻译它的画布,所以尽管你实际上正在绘制它,但它远离可见的剪辑。

要解决此问题,只需将scrollX值添加到绘图坐标中即可。

答案 1 :(得分:1)

感谢@ simekadam的回答,我终于解决了这个问题。 这就是我修复它的方法,以防你没有得到它

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

答案 2 :(得分:0)

你必须设置android:digits =" 0123456789"在xml.But我不知道为什么......

答案 3 :(得分:0)

getScrollX()解决了我的问题

picker.displayedPropertyKeys = [CNContactPhoneNumbersKey]
picker.predicateForEnablingContact = NSPredicate(format: "phoneNumbers.@count > 0")
picker.predicateForSelectionOfContact = NSPredicate(format: "phoneNumbers.@count == 1")
picker.predicateForSelectionOfProperty = NSPredicate(format: "key == phoneNumber")