Пользовательский EditText не работает после установки его типа ввода через setInputType ()

Я создал пользовательский EditText и onDraw() его onDraw() . Все работало нормально (я мог рисовать что-либо внутри EditText), пока не захочу изменить метод ввода для этого EditText и вызвал эту функцию:

 setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); 

Независимо от того, когда и где я его называю: после того, как он был вызван, мой пользовательский EditText исчезает, и отображается только оригинальный EditText , хотя моя переопределенная onDraw() и внутри него вызывается либо ее onDraw() (независимо от того, где Именно я его вызываю).

Я также пробовал играть с прозрачными цветами, как это предлагается в некоторых сообщениях здесь: setBackgroundColor(Color.TRANSPARENT) в базовом классе, а также paint.setColor(0x80FF0000) для моего объекта Paint в функции onDraw() но они не повлияли.

EDIT: Я обнаружил, что проблема заключается не в настройке типа ввода, а одновременном настройке типа ввода и гравитации EditText :

 setGravity(Gravity.CENTER_HORIZONTAL); 

Если какой-либо из них не установлен, мое пользовательское представление создается как ожидалось. Также (и что еще страннее): с Gravity.CENTER_VERTICAL нет проблем, только с Gravity.CENTER_HORIZONTAL и Gravity.CENTER .

Кажется, что эти два параметра являются взаимоисключающими. Это возможно?

Solutions Collecting From Web of "Пользовательский EditText не работает после установки его типа ввода через setInputType ()"

Проверьте значения getScrollX() . Бьюсь об заклад, вы увидите такие значения, как 1000000 пикселей. EditText переводит свой холст таким странным образом, поэтому, хотя вы на самом деле рисуете его, это путь от видимого клипа.

Чтобы решить проблему, просто добавьте значение scrollX в ваши координаты рисования.

Вы должны установить android: цифры = "0123456789" в xml.But я не знаю, почему …