web-dev-qa-db-ja.com

EditTextの入力が整数かどうかを判断する方法は?

こんにちはAndroidプログラミングの初心者です。

edittextフィールドとbuttonを含むアクティビティを作成しようとしています。ユーザーが整数を入力すると、ボタンが次のアクティビティに進みます。ただし、ユーザーの入力のタイプを確認する方法がある場合は私はしません。

誰でも手伝ってくれる?どうもありがとうございました!

18
Yansuck

更新:

EditTextを制御して、数値のみを受け入れることができます

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

またはプログラムで確認する

コトリンで

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

Javaで

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");
}
28
Mark Pazon

APIレベル1から、Androidはそれを行うためのヘルパーメソッドを提供します(正規表現を使用したり、例外をキャッチしたりする必要はありません): TextUtils.isDigitsOnly(CharSequence str)

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

このメソッドは、空の文字列でtrueを返すことに注意してください: Issue 24965

41
jmaffre

EditTextで数値のみを受け入れる場合は、レイアウトファイルでAndroid:inputType="number"を指定できません。

10
muffinmad

TextWatcherEditTextを使用して、EditTextのすべての変更の値を取得できます。アクティビティにTextWatcherのインターフェイスを追加する必要があります。

 mEditText.addTextChangedListener(Your Class Name.this);

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+)?");
  }
4
Herry

次のコードを使用して、桁を決定できます。

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

ただし、このメソッドは空の文字列でもtrueを返すため、次のように空の文字列を検証できます。

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

この解決策を試してください。

プロパティを追加する必要がありますAndroid:nextFocusDown="@+id/nextedittext_id"およびAndroid:singleLine="true"をedittextsで使用します。

例えば:

<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+)?");
    }
1
SAAM

文字列がintegerfloatlongまたはdoubleを含む任意のタイプの数値であるかどうかをチェックする、よりクリーンなソリューションを見つけました。

import Java.math.BigDecimal;

Boolean isNumber;

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