Как определить, является ли вход в EditText целым числом?

Привет, я новичок в Android-программировании.

Я пытаюсь создать активность, которая включает в себя поле edittext и button. Когда пользователь вводит целое число, кнопка приведет их к следующему действию. Однако я не знаю, есть ли способ проверить тип ввода пользователя.

Кто-нибудь может мне помочь? Большое вам спасибо!

Ответ 1

Обновить:

Вы можете контролировать EditText, чтобы принимать только цифры

<TextView 
.
.
.
android:inputType="number"
/>

или проверить это программно

В котлине

val number = editText123.text.toString().toIntOrNull() 
val isInteger = number != null

На яве

String text = editText123.getText().toString();
try {
   int num = Integer.parseInt(text);
   Log.i("",num+" is a number");
} catch (NumberFormatException e) {
   Log.i("",text+" is not a number");
}

Ответ 2

Начиная с уровня API 1, Android предоставляет вспомогательный метод для этого (нет необходимости использовать регулярное выражение или исключение catching): TextUtils.isDigitsOnly(CharSequence str)

boolean digitsOnly = TextUtils.isDigitsOnly(editText.getText());

Обратите внимание, что этот метод возвращает true с пустой строкой: Проблема 24965

Ответ 3

Если вы хотите, чтобы EditText принимал только номера, которые вы не можете указать android:inputType="number" в файле макета.

Ответ 4

Вы можете использовать TextWatcher для EditText, чтобы получить значение каждого изменения в EditText. Вам нужно добавить интерфейс TextWatcher в свою активность.

 mEditText.addTextChangedListener(Your Class Name.this);

on в методе TextWatcher

     @Override
public void afterTextChanged(Editable s) {
    Log.v("Log_tag", "After TextChanged" + s.toString());

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    Log.i("Log_tag", "Before TextChanged" + s.toString());

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    Log.e("Log_tag", "ontext Changed" + s.toString());
    //you can match here s with number or integer 
             if(isNumeric( s.toString())){
                      //it is number     
               }
    }


 public static boolean isNumeric(String str)
 {
    return str.matches("-?\\d+(.\\d+)?");
  }

Ответ 5

Попробуйте это решение.

Вам нужно добавить свойства android:nextFocusDown="@+id/nextedittext_id" и        android:singleLine="true" в ваших редакторах.

Например:

<EditText
        android:id="@+id/ed1"
        android:layout_width="200dp"
        android:nextFocusDown="@+id/ed2"
         android:singleLine="true"
        android:layout_height="wrap_content" />


 <EditText
        android:id="@+id/ed2"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:layout_below="@+id/ed1" />

И добавьте следующий код в свою деятельность:

 editText1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String value=s.toString();
                    if(isNumeric(value)){
                        if(Integer.parseInt(value)>=100){
                            editText1.setFocusableInTouchMode(true);
                            editText1.setFocusable(false);
                        }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        editText2.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                editText1.setFocusableInTouchMode(true);
                editText1.setFocusable(true);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

isNumeric метод такой же, как указано выше:

 public static boolean isNumeric(String str)
    {
        return str.matches("-?\\d+(.\\d+)?");
    }

Ответ 6

Я нашел намного более чистое решение, которое проверяет, является ли строка любым типом числа, включая integer, float, long или double.

import java.math.BigDecimal;

Boolean isNumber;

try {
    BigDecimal n = new BigDecimal(theStingToCheck);
    isNumber = true;
} catch (Exception e) {
    isNumber = false;
}

Ответ 7

Следующий код может использоваться для определения цифр,

boolean isDigits = TextUtils.isDigitsOnly(edtDigits.getText().toString());

Однако, поскольку этот метод также возвращает true с пустой строкой, вы можете поместить проверку для пустой строки следующим образом:

public boolean isDigits(String number){ 
   if(!TextUtils.isEmpty(number)){
       return TextUtils.isDigitsOnly(number);
   }else{
       return false;
   }
}