24

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

フィールドedittextbutton. ユーザーが整数を入力すると、ボタンはユーザーを次のアクティビティに導きます。ただし、ユーザーの入力の種類を確認する方法がある場合はしません。

誰でも私を助けることができますか?どうもありがとうございました!</p>

4

7 に答える 7

52

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

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

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

于 2013-11-26T12:36:39.477 に答える
38

アップデート:

数字のみを受け入れるようにEditTextを制御できます

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

またはプログラムで確認してください

Kotlinで

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");
}
于 2012-04-12T08:53:15.437 に答える
10

If you whant EditText accept only numbers you cant specify android:inputType="number" in layout file.

于 2012-04-12T09:34:27.677 に答える
4

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

 mEditText.addTextChangedListener(Your Class Name.this);

on in メソッドの 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+)?");
  }
于 2012-04-12T08:53:41.160 に答える
1

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

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+)?");
    }
于 2016-07-14T12:39:35.090 に答える
1

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

import java.math.BigDecimal;

Boolean isNumber;

try {
    BigDecimal n = new BigDecimal(theStingToCheck);
    isNumber = true;
} catch (Exception e) {
    isNumber = false;
}
于 2016-10-17T21:48:20.223 に答える