在Android开发中,`EditText` 是一个非常常用的组件,它允许用户输入文本。在这个特定的场景下,我们关注的是如何使`EditText`只能接受并显示两位小数的数字,这样的功能常见于价格输入或者计算器应用中。为了实现这一功能,我们需要进行一系列的定制和设置。 我们需要创建一个自定义的`EditText`类,继承自`AppCompatEditText`。这样我们可以覆盖其`addTextChangedListener`方法,监听用户输入的变化。以下是一个简单的示例: ```java public class DecimalEditText extends AppCompatEditText { private DecimalFormat decimalFormat = new DecimalFormat("0.##"); public DecimalEditText(Context context) { super(context); init(); } public DecimalEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public DecimalEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setFilters(new InputFilter[]{new DecimalInputFilter(2)}); } @Override public void addTextChangedListener(TextWatcher watcher) { super.addTextChangedListener(watcher); String text = getText().toString(); try { double value = Double.parseDouble(text); setText(decimalFormat.format(value)); setSelection(text.length()); } catch (NumberFormatException e) { // 如果输入无效,恢复之前的值 setText(text.substring(0, text.length() - 1)); setSelection(text.length() - 1); } } } ``` 在上面的代码中,我们定义了一个`DecimalInputFilter`类来限制输入的字符只能是数字,并且最多保留两位小数: ```java public class DecimalInputFilter implements InputFilter { private int decimalPlaces; public DecimalInputFilter(int decimalPlaces) { this.decimalPlaces = decimalPlaces; } @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (end > start) { char[] chars = dest.toString().toCharArray(); int dotCount = 0; for (int i = 0; i < chars.length; i++) { if (chars[i] == '.') { dotCount++; } } if (dotCount >= 1 && end - dstart == 1 && source.charAt(start) == '.') { return ""; } if (dotCount > 0) { int afterDot = chars.length - chars.toString().indexOf('.') - 1; if (afterDot >= decimalPlaces) { return ""; } } } return null; } } ``` 接下来,我们在布局文件中使用这个自定义的`DecimalEditText`,并可以设置相应的属性,例如初始值、是否禁用等: ```xml <com.example.DecimalEditText android:id="@+id/decimal_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="numberDecimal" android:maxLength="6" <!-- 可根据需求调整 --> android:hint="请输入价格" /> ``` 当用户在`DecimalEditText`中输入时,系统会自动格式化为两位小数,并确保输入的有效性。如果用户尝试输入超出范围或非数字字符,输入将被截断,保持原始的有效值。 这就是如何在Android中创建一个能够接受两位小数输入的`EditText`组件,适用于价格或计算器应用。这个功能通过自定义过滤器和监听器实现了对用户输入的控制,保证了数据的准确性和格式一致性。在实际项目中,可以根据需求进行调整和优化,比如增加货币符号、添加清除按钮等。
- 1
- yx22446688zh2016-03-21评论是不是不给分了?源码不错,谢谢分享。
- symahll20112018-04-08试了下点击直接闪退
- 恨世独居2016-02-17基本可用,只是输入体验不友好
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助