Как я использую InputType=numberDecimal с “телефонной” мягкой клавиатурой?

Для 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 как глобальную опцию вне приложения.

Там какой-либо путь состоит в том, чтобы использовать "телефонную" программируемую клавиатуру стиля, также с помощью ограничений "числа" на то, что вводится?

20
задан artex 12 June 2013 в 13:15
поделиться

3 ответа

Пока что я решил расширить 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() на что-то, что суперкласс не предполагал)?

.
9
ответ дан 30 November 2019 в 00:13
поделиться

Вы просто используйте клавиатуру телефона и проверьте ввод самостоятельно. Проверить, является ли введенная цифра допустимой цифрой от 0 до 9, не очень сложно.

1
ответ дан 30 November 2019 в 00:13
поделиться

Попробуйте использовать android:numeric="integer" в представлении EditText.

0
ответ дан 30 November 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: