こんにちは、私は Android プログラミングの初心者です。
フィールドedittext
とbutton
. ユーザーが整数を入力すると、ボタンはユーザーを次のアクティビティに導きます。ただし、ユーザーの入力の種類を確認する方法がある場合はしません。
誰でも私を助けることができますか?どうもありがとうございました!</p>
こんにちは、私は Android プログラミングの初心者です。
フィールドedittext
とbutton
. ユーザーが整数を入力すると、ボタンはユーザーを次のアクティビティに導きます。ただし、ユーザーの入力の種類を確認する方法がある場合はしません。
誰でも私を助けることができますか?どうもありがとうございました!</p>
API レベル 1 以降、Android はそれを行うためのヘルパー メソッドを提供します (正規表現を使用したり、例外をキャッチしたりする必要はありません): TextUtils.isDigitsOnly(CharSequence str)
boolean digitsOnly = TextUtils.isDigitsOnly(editText.getText());
このメソッドは空の文字列でtrueを返すことに注意してください:問題 24965
アップデート:
数字のみを受け入れるように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");
}
If you whant EditText accept only numbers you cant specify android:inputType="number"
in layout file.
TextWatcher
forを使用し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+)?");
}
この解決策を試してください。
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+)?");
}
integer
文字列が、float
、long
またはを含む任意のタイプの数値であるかどうかを確認する、よりクリーンなソリューションを見つけましたdouble
。
import java.math.BigDecimal;
Boolean isNumber;
try {
BigDecimal n = new BigDecimal(theStingToCheck);
isNumber = true;
} catch (Exception e) {
isNumber = false;
}