こんにちはAndroidプログラミングの初心者です。
edittext
フィールドとbutton
を含むアクティビティを作成しようとしています。ユーザーが整数を入力すると、ボタンが次のアクティビティに進みます。ただし、ユーザーの入力のタイプを確認する方法がある場合は私はしません。
誰でも手伝ってくれる?どうもありがとうございました!
更新:
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");
}
APIレベル1から、Androidはそれを行うためのヘルパーメソッドを提供します(正規表現を使用したり、例外をキャッチしたりする必要はありません): TextUtils.isDigitsOnly(CharSequence str)
boolean digitsOnly = TextUtils.isDigitsOnly(editText.getText());
このメソッドは、空の文字列でtrueを返すことに注意してください: Issue 24965
EditTextで数値のみを受け入れる場合は、レイアウトファイルでAndroid:inputType="number"
を指定できません。
TextWatcher
のEditText
を使用して、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+)?");
}
次のコードを使用して、桁を決定できます。
boolean isDigits = TextUtils.isDigitsOnly(edtDigits.getText().toString());
ただし、このメソッドは空の文字列でもtrueを返すため、次のように空の文字列を検証できます。
public boolean isDigits(String number){
if(!TextUtils.isEmpty(number)){
return TextUtils.isDigitsOnly(number);
}else{
return false;
}
}
この解決策を試してください。
プロパティを追加する必要があります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+)?");
}
文字列がinteger
、float
、long
またはdouble
を含む任意のタイプの数値であるかどうかをチェックする、よりクリーンなソリューションを見つけました。
import Java.math.BigDecimal;
Boolean isNumber;
try {
BigDecimal n = new BigDecimal(theStingToCheck);
isNumber = true;
} catch (Exception e) {
isNumber = false;
}