嗨,我是 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"
/>
或以编程方式检查
在科特林
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");
}
如果您希望 EditText 只接受您无法android:inputType="number"
在布局文件中指定的数字。
您可以使用TextWatcher
forEditText
获取每次更改的值。EditText
您需要在 Activity 中添加 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"
在您的编辑文本中。
例如:
<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;
}