Для EditText
поле, пользователь должен только вводить верные номера, таким образом, я использую android:inputType="numberDecimal"
. К сожалению, программируемая клавиатура, которую поднимает Android, имеет числа только вдоль верхнего ряда, в то время как следующие три строки имеют различные другие символы (знак доллара, знак процента, восклицательный знак, пространство, и т.д.). Начиная с numberDecimal
только принимает номера 0-9, знак минус и десятичную точку, имело бы больше смысла использовать "телефонную" программируемую клавиатуру (0-9 в 3x3 сетка плюс некоторые другие символы). Это сделало бы кнопки больше и легче совершить нападки (так как это 4x4 сетка, а не 10x4 сетка в той же экранной области). К сожалению, использование android:inputType="phone"
позволяет нечисловые символы, такие как круглые скобки
Я попытался использовать android:inputType="numberDecimal|phone"
, но numberDecimal
аспект битового флага, кажется, проигнорирован. Я также попытался использовать android:inputType="phone"
в сочетании с android:digits="0123456789-."
, но это все еще позволяет несколько знаков минус или десятичных точек (inputType="number"
имеет действительно хорошую проверку ошибок на подобные вещи и не позволит пользователю даже ввести его). Я также попытался использовать android:inputType="phone"
в xml файле расположения, при использовании a DigitsKeyListener
в коде Java, но затем это просто использует программируемую клавиатуру числа по умолчанию (тот, который имеет числа только вдоль верхнего ряда) (это, кажется, устанавливает InputType.TYPE_CLASS_NUMBER
, который освобождает InputType.TYPE_CLASS_PHONE
установленный xml расположением).
Запись пользовательского IME не работала бы, так как пользователь должен будет выбрать IME как глобальную опцию вне приложения.
Там какой-либо путь состоит в том, чтобы использовать "телефонную" программируемую клавиатуру стиля, также с помощью ограничений "числа" на то, что вводится?
Пока что я решил расширить DigitsKeyListener и переопределить getInputType() так, чтобы он возвращал InputType.TYPE_CLASS_PHONE. Это позволит мне использовать удобный filter() в DigitsKeyListener, но в то же время использовать софт-клавиатуру TYPE_CLASS_PHONE. Я новичок в программировании для Android, но, похоже, это работает, ничего не нарушая. Код выглядит примерно так:
import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
public CustomDigitsKeyListener() {
super(false, false);
}
public CustomDigitsKeyListener(boolean sign, boolean decimal) {
super(sign, decimal);
}
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
}
Есть ли что-то неправильное в этом (переключение возврата getInputType() на что-то, что суперкласс не предполагал)?
.Вы просто используйте клавиатуру телефона и проверьте ввод самостоятельно. Проверить, является ли введенная цифра допустимой цифрой от 0 до 9, не очень сложно.
Попробуйте использовать android:numeric="integer"
в представлении EditText.