Ответ 1
Попробуйте использовать TextView.setRawInputType(), который соответствует атрибуту android:inputType
.
Я читал Android: ограничение EditText на номера и Как показать цифровую клавиатуру на EditText в Android?. К сожалению, ни один из них, похоже, не соответствует моим потребностям.
Я хочу ограничить ввод EditText только номерами. Тем не менее, я также хочу разрешить подписанный и/или десятичный ввод.
Вот мой текущий код (мне нужно сделать это программно):
EditText edit = new EditText(this);
edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
При этом мой EditText весомо ограничивает все входные данные численными цифрами. К сожалению, он не позволяет ничего другого, например десятичной точки.
Если я изменил эту строку на edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
, EditText примет все входные данные (это не то, что я хочу...).
Я пробовал комбинировать флаги (в отчаянии, чтобы увидеть, будет ли это работать):
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)
Это тоже не сработало (EditText принял все входные данные как обычно).
Итак, как мне это сделать?
Попробуйте использовать TextView.setRawInputType(), который соответствует атрибуту android:inputType
.
Нет причин использовать setRawInputType()
, просто используйте setInputType()
. Однако вы должны комбинировать класс и флаги с оператором OR:
edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
Лучший способ сделать это программно - использовать следующий метод:
public static DigitsKeyListener getInstance (boolean sign, boolean decimal)
Возвращает DigitsKeyListener, который принимает цифры от 0 до 9, плюс знак минуса (только в начале) и/или десятичную точку (только по одному для каждого поля), если это указано.
Это решает проблему многих ".". в EditText
editText.setKeyListener(DigitsKeyListener.getInstance(true,true)); // decimals and positive/negative numbers.
editText.setKeyListener(DigitsKeyListener.getInstance(false,true)); // positive decimals numbers.
editText.setKeyListener(DigitsKeyListener.getInstance(false,false)); // positive integer numbers.
editText.setKeyListener(DigitsKeyListener.getInstance(true,false)); // positive/negative integer numbers.
Использовать этот. Работает отлично
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
РЕДАКТИРОВАТЬ
версия kotlin
fun EditText.onlyNumbers() {
inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
keyListener = DigitsKeyListener.getInstance("0123456789")
}
поместите эту строку в xml
android:inputType="number|numberDecimal"
Привет, У меня также была эта проблема. Я использую С# с Xamarin
Небольшое замечание, что я надеюсь, что и кто-то другой.
Я попробовал несколько методов, упомянутых здесь.
edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);
был самым близким, но все еще не работал. Как упоминал Ральф, вы можете использовать
edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
Однако в моем С# у меня этого не было. вместо этого вы делаете это следующим образом:
edittext1.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;
Обратите внимание, что ПРИКАЗАТЬ это важно. Если вы сначала поместите десятичный знак, он все равно позволит вам набирать любые символы, где If Numer сначала будет только числовым, но позволяет децимальный разделитель!
EditText edit = new EditText(this);
edit.setHorizontallyScrolling(true);
edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);
Чтобы задать тип ввода EditText как десятичный, используйте этот код:
EditText edit = new EditText(this);
edit.SetRawInputType(Android.Text.InputTypes.NumberFlagDecimal | Android.Text.InputTypes.ClassNumber);
мое решение:
public void onTextChanged(CharSequence s, int start, int before, int count) {
char ch=s.charAt(start + count - 1);
if (Character.isLetter(ch)) {
s=s.subSequence(start, count-1);
edittext.setText(s);
}
используйте setRawInputType и setKeyListener
editTextNumberPicker.setRawInputType(InputType.TYPE_CLASS_NUMBER |
InputType.TYPE_NUMBER_FLAG_DECIMAL|InputType.TYPE_NUMBER_FLAG_SIGNED );
editTextNumberPicker.setKeyListener(DigitsKeyListener.getInstance(false,true));//set decimals and positive numbers.