项目中遇到的问题(EditText)

来源:互联网 发布:多媒体网络中控系统 编辑:程序博客网 时间:2024/06/05 19:05

1.editText设置点击事件:setOnClickListener,点击一次是不起作用的,当点击第二次的时候是有作用的。是因为editText是有焦点的。若想点击事件点击一次有效,我自己认为最完美的解决方案是:在对应的xmL布局中,为editText设置2个属性:android:clickable="true"  android focusableInTouchMode="false"    这样就可以保证点击一次起作用。

2.editText如何做到和TextView一样的效果:不允许编辑。解决方案是在代码中设置editText.setKeyListener(null);

3.保留小数问题。最好的解决方案不是DecimalFormat,DecimalFormat是用户输入完成之后做出的保留小数位数;举例:输入身高:160.003,如果用DecimalFormat保留2位小数,用户在输入的过程中是看不到变化的。还是160.003,保存之后,再进入界面看到的是:160.00。如果用InputFilter保留2位小数的话,用户输入的就是160.00,而多余的那一位是输入不了的。一下是截取的代码片段:
private InputFilter getInputFilter(final int DECIMAL_DIGITS) {
return new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
//删除等特殊字符,直接返回
if ("".equals(source.toString())) {
return null;
}
String dValue = dest.toString();
String[] splitArray = dValue.split("\\.");
if (splitArray.length > 1) {
String dotValue = splitArray[1];
int diff = dotValue.length() + 1 - DECIMAL_DIGITS;
if (diff > 0) {
return source.subSequence(start, end - diff);
}
}
return null;
}
};
}

参数便是保留的小数位数,如果保留一位小数则传1,如果保留2位小数则传2。

4.editText在设置了InputFilter之后,若想设置输入字符串的最大长度,以下是代码片段:

private InputFilter mInputFilterLengh;
private InputFilter mInputFilter;
mInputFilterLengh = new InputFilter.LengthFilter(5);
tvDose.setFilters(new InputFilter[]{mInputFilter,mInputFilterLengh});

此例子是输入的最大长度是5。


这个保留小数位数有点儿问题,对不住。造成的问题是当用户输入的时候有非常不好的体验,小数点之前的数据,只能是全部删除之后,才能输入上数据。反正就是有问题。请大家还是看写的EditText保留小数位数的博客。



原创粉丝点击