我已创建自定义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_HORIZONTAL
和Gravity.CENTER
没有问题。
似乎这两个设置是互斥的。这有可能吗?
答案 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")