Для поля EditText
пользователь должен вводить только действительные числа, поэтому я использую android:inputType="numberDecimal"
. К сожалению, экранная клавиатура, которую вызывает Android, имеет цифры только вдоль верхнего ряда, в то время как в следующих трех строках есть другие символы (знак доллара, знак процента, восклицательный знак, пробел и т. Д.). Поскольку numberDecimal
принимает только цифры 0-9, знак минус и десятичную точку, было бы более целесообразно использовать программную клавиатуру "телефон" (0-9 в сетке 3x3 плюс некоторые другие символы). Это сделало бы кнопки больше и легче нажимать (поскольку это сетка 4х4, а не сетка 10х4 в той же области экрана). К сожалению, использование android:inputType="phone"
допускает нечисловые символы, такие как скобки
Я пытался использовать android:inputType="numberDecimal|phone"
, но аспект битового флага numberDecimal
, похоже, игнорируется. Я также пытался использовать android:inputType="phone"
в сочетании с android:digits="0123456789-."
, но это по-прежнему допускает множественные отрицательные знаки или десятичные точки (inputType="number"
действительно хорошо проверяет ошибки на подобные вещи и не позволяет пользователю даже ввести его ). Я также попытался использовать android:inputType="phone"
в файле макета xml, используя DigitsKeyListener
в коде Java, но тогда он просто использует программную клавиатуру с номерами по умолчанию (та, которая имеет цифры только в верхней строке) (кажется, что установите InputType.TYPE_CLASS_NUMBER
, что аннулирует InputType.TYPE_CLASS_PHONE
, установленный макетом xml).
Запись собственного IME не будет работать, поскольку пользователю придется выбирать IME в качестве глобального параметра вне приложения.
Есть ли способ использовать программную клавиатуру в стиле "телефон", а также вводить ограничения на количество вводимых номеров?