我正在尝试创建一个简单的计算器,它为用户提供 EditText 以输入数字。允许的输入内容应该是[1,2,3,4,5,6,7,8,9,0,.]
我知道可以通过使用以下代码来限制输入内容
android:digits="1234567890."
android:inputType="phone"
.
但是如何防止用户在 EditText 框中添加多个点 ( )?
我正在尝试创建一个简单的计算器,它为用户提供 EditText 以输入数字。允许的输入内容应该是[1,2,3,4,5,6,7,8,9,0,.]
我知道可以通过使用以下代码来限制输入内容
android:digits="1234567890."
android:inputType="phone"
.
但是如何防止用户在 EditText 框中添加多个点 ( )?
您可以 在 EditText 中使用InputFilter限制字符:
EditText mEdit = (EditText)findViewById(R.id.mEdit);
InputFilter[] filters = {new AdnNameLengthFilter()};
mEdit.setFilters(filters);
public static class AdnNameLengthFilter implements InputFilter
{
private int nMax;
public CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
Log.w("Android_12", "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);
if(dest.toString()=="."||( source.toString()==".")
{
//DO SOMTHING HERE
}else
{
//DO SOMTHING HERE
}
}
}
第二个选项是TextWatcher,用于查找用户输入的字符:
mEditText = (EditText)findViewById(R.id.ET);
mEditText.addTextChangedListener(mTextWatcher);
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
// YOU STRING BEFORE CHANGE
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
// CHARS INPUT BY USER
}
@Override
public void afterTextChanged(Editable s) {
// AFTER TEXT CCHANGE In EDITTEXT BY USER
}
};
使用TextWatcher在输入时检查每个内容,并确定是否应允许将其输入 EditText 或忽略它。
让自己成为一个并覆盖它的方法来实现你想要的任何逻辑。
创建 TextWatcher 后,将其应用于 EditText,如下所示:
edt.addTextChangedListener(mTextWatcher);
您可以使用此数字属性android:digits="0123456789"