public class EditTextUtils {
/**
* 设置edittext只能输入小数点后两位
*/
public static void afterDotTwo(final EditText editText) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// 限制最多能输入2位整数
if (s.toString().contains(".")) {
if (s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,2) + s.toString().substring(s.toString().indexOf("."));
editText.setText(s);
editText.setSelection(2);
}
}else {
if (s.toString().length() > 2){
s = s.toString().subSequence(0,2);
editText.setText(s);
editText.setSelection(2);
}
}
// 判断小数点后只能输入两位
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
editText.setText(s);
editText.setSelection(s.length());
}
}
//如果第一个数字为0,第二个不为点,就不允许输入
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
editText.setText(s);
editText.setSelection(s.length());
}
} } @Override public void afterTextChanged(Editable s) { if (editText.getText().toString().trim() != null && !editText.getText().toString().trim().equals("")) { if (editText.getText().toString().trim().substring(0, 1).equals(".")) { editText.setText("0" + editText.getText().toString().trim()); editText.setSelection(1); } } } }); }}1. 限制整数只能输入多位
我这边的需求是整数最多为2位数,所以我先判断是否有小数点,有的话就获取前面2位加上小数点以及其后所有。
// 限制最多能输入2位整数
if (s.toString().contains(".")) {
if (s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,2) + s.toString().substring(s.toString().indexOf("."));
editText.setText(s);
editText.setSelection(2);
}
}else {
if (s.toString().length() > 2){
s = s.toString().subSequence(0,2);
editText.setText(s);
editText.setSelection(2);
}
}2. 限制小数点后只能输两位
这个判断是判断金额的重点,本来金额小数点后就只能有两位,当然有些人的需求可能是只能有一位,这不要紧,把数字改下就行。首先判断是否有小数点,如果有,判断是否小数点后大于两位,如果大于就只取前两位。
// 判断小数点后只能输入两位
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
editText.setText(s);
editText.setSelection(s.length());
}
}3.第一个数为0的情况
我这里写的判断不是很好,之后可以改进。这个特殊情况是这样的,假如你输入的第一位是0,你想想,你能输入0233,05这种数字吗,就是您能,这样展示给用户的效果也很不友好,所以要判断如果第一位数是0,第二位不是小数点的话,就输出0。
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
editText.setText(s.subSequence(0, 1));
editText.setSelection(1);
return;
}
}.第一个是小数点的情况
假如你的数是5.26,这时候你把光标放到5后面,删除5,如果你不做处理,那展示出来的就是.26,这样的展示就很不友好,所以我们要想办法要在第一位为小数点的情况下补0。
public void afterTextChanged(Editable s) {
if (editText.getText().toString().trim() != null && !editText.getText().toString().trim().equals("")) {
if (editText.getText().toString().trim().substring(0, 1).equals(".")) {
editText.setText("0" + editText.getText().toString().trim());
editText.setSelection(1);
}
}
}
本文介绍了一个用于限制Android应用中EditText控件输入格式的方法,确保用户只能输入最多两位整数及两位小数点后的数值。文章详细解释了如何通过监听文本变化来实现这一功能,并处理了一些特殊情况,如首位为0或小数点时的显示问题。
840

被折叠的 条评论
为什么被折叠?



