android控件edittext输入类型

android控件edittext输入类型,android,android-edittext,android-inputtype,android-input-filter,Android,Android Edittext,Android Inputtype,Android Input Filter,我有一个编辑文本,我想控制它。输入类型是numberDecimal,我想这样写。我想在小数点前设置0>最大值10,小数点后设置0>最大值2 我搜索并找到了一些InputFilter示例 edittext.setFilters(new InputFilter[] { new DigitsKeyListener( Boolean.FALSE, Boolean.TRUE) { int beforeDecimal = 10, afterDecimal = 2;

我有一个编辑文本,我想控制它。输入类型是numberDecimal,我想这样写。我想在小数点前设置0>最大值10,小数点后设置0>最大值2 我搜索并找到了一些InputFilter示例

edittext.setFilters(new InputFilter[] { new DigitsKeyListener(
            Boolean.FALSE, Boolean.TRUE) {
        int beforeDecimal = 10, afterDecimal = 2;

        @Override
        public CharSequence filter(CharSequence source, int start, int end,
                Spanned dest, int dstart, int dend) {
            String etText = edittext.getText().toString();
            String temp = edittext.getText() + source.toString();
            if (temp.equals(".")) {
                return "0.";
            } else if (temp.toString().indexOf(".") == -1) {
                // no decimal point placed yet
                if (temp.length() > beforeDecimal) {
                    return "";
                }
            } else {
                int dotPosition ;
                int cursorPositon = edittext.getSelectionStart();
                if (etText.indexOf(".") == -1) {
                    Log.i("First time Dot", etText.toString().indexOf(".")+" "+etText);
                    dotPosition = temp.indexOf(".");
                    Log.i("dot Positon", cursorPositon+"");
                    Log.i("dot Positon", etText+"");
                    Log.i("dot Positon", dotPosition+"");
                }else{
                    dotPosition = etText.indexOf(".");
                    Log.i("dot Positon", cursorPositon+"");
                    Log.i("dot Positon", etText+"");
                    Log.i("dot Positon", dotPosition+"");
                }
                if(cursorPositon <= dotPosition){
                    Log.i("cursor position", "in left");
                    String beforeDot = etText.substring(0, dotPosition);
                    if(beforeDot.length()<beforeDecimal){
                        return source;
                    }else{
                        if(source.toString().equalsIgnoreCase(".")){
                            return source;
                        }else{
                            return "";
                        }

                    }
                }else{
                    Log.i("cursor position", "in right");
                    temp = temp.substring(temp.indexOf(".") + 1);
                    if (temp.length() > afterDecimal) {
                        return "";
                    }
                }
            }

            return super.filter(source, start, end, dest, dstart, dend);
        }
    } });
edittext.setFilters(新的InputFilter[]{new DigitKeyListener(
Boolean.FALSE,Boolean.TRUE){
小数点前的整数=10,小数点后的整数=2;
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地、内部数据起点、内部数据起点){
字符串etText=edittext.getText().toString();
String temp=edittext.getText()+source.toString();
如果(温度等于(“.”){
返回“0”;
}else if(temp.toString().indexOf(“.”)=-1){
//还没有小数点
if(temp.length()>在十进制之前){
返回“”;
}
}否则{
整型点位;
int cursorposition=edittext.getSelectionStart();
如果(etText.indexOf(“.”)=-1){
Log.i(“第一时间点”,etText.toString().indexOf(“.”+“+etText”);
点位置=温度指数(“.”);
Log.i(“点位置”,光标位置+”);
Log.i(“点位置”,etText+);
Log.i(“点位置”,点位置+”);
}否则{
dotPosition=etText.indexOf(“.”);
Log.i(“点位置”,光标位置+”);
Log.i(“点位置”,etText+);
Log.i(“点位置”,点位置+”);
}

如果(光标位置,可以使用

setRawInputType(InputType.InputType.TYPE_NUMBER_FLAG_DECIMAL)  


针对edittext

我测试了这段代码,我可以在点位置之前检查长度,但不能在点位置之后检查长度。我将查看数字格式类:并了解如何使用该类根据使用NumberFormat的.parse方法解析的相同输入验证原始用户输入
setRawInputType(InputType.InputType.TYPE_CLASS_NUMBER)