Android开发中如何检测EditText输入 仅允许输入数字禁止其他字符
Android EditText仅允许输入数字的实现方法
方案1:XML布局静态配置(首选,实现最简单)
直接在布局文件R.layout.activity_percent_input的EditText控件节点中添加以下属性即可:
<EditText android:id="@+id/inputCorrect" android:layout_width="match_parent" android:layout_height="wrap_content" <!-- 仅允许输入整数数字 --> android:inputType="number" <!-- 可选:精确指定允许输入的字符,彻底屏蔽其他字符 --> android:digits="0123456789" <!-- 若需要允许输入小数,把inputType改成如下即可 --> <!-- android:inputType="numberDecimal" --> <!-- 若需要允许正负号,加numberSigned后缀 --> <!-- android:inputType="number|numberSigned" --> />
这种方式系统会自动限制输入法只弹出数字键盘,且无法输入非指定字符,适配绝大多数场景。
方案2:代码动态设置(适用于需要运行时切换输入规则的场景)
注意你原代码存在错误:findViewById必须在setContentView之后调用,否则会触发空指针异常,修正后的完整代码如下:
public class percentInputActivity extends AppCompatActivity { EditText correctInputText; Button calButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_percent_input); // 初始化控件必须放在setContentView之后 correctInputText = findViewById(R.id.inputCorrect); calButton = findViewById(R.id.calButton); // 方式1:直接设置输入类型 correctInputText.setInputType(InputType.TYPE_CLASS_NUMBER); // 允许小数的话用这个 // correctInputText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); // 方式2:用InputFilter做更严格的自定义限制,比如同时限制输入长度和字符范围 InputFilter numberFilter = (source, start, end, dest, dstart, dend) -> { for (int i = start; i < end; i++) { if (!Character.isDigit(source.charAt(i))) { return ""; } } return null; }; // 同时限制最多输入5位数字 correctInputText.setFilters(new InputFilter[]{numberFilter, new InputFilter.LengthFilter(5)}); } }
内容的提问来源于stack exchange,提问作者Farzad Moradkhani
相关产品推荐
相关产品推荐

