有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用过滤器以编程方式设置EditText数字

我试图用模式“9999”(其中9是数字0-9)编程设置EditText的数字值。到目前为止,我已经:

final EditText editText =  new EditText(v.getContext());
editText.setLayoutParams(params);
editText.setText("");
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLenght)});
editText.addTextChangedListener(new TextWatcher() {
    int len=0;
    //int count=0;

     @Override
     public void afterTextChanged(Editable s) { 
         String str = editText.getText().toString(); 
         if(str.length()==1&& len <str.length()){//len check for backspace 
             editText.append(",");
         }
     }

     @Override
     public void beforeTextChanged(CharSequence c, int arg1, int arg2, int arg3) {
         String str = editText.getText().toString(); 
         len = str.length();
     }

     @Override
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
         String str = editText.getText().toString();
     }     
});

这不是最好的,因为:

  • DigitsKeyListener不会接受分隔符
  • 当我输入“1,0”和 然后返回2倍的空格,我可以输入“11111”。我得退三步 然后当我输入“11111”时,它将是“11111”

有什么想法吗


共 (1) 个答案

  1. # 1 楼答案

    您可以尝试将afterTextChange()方法更改为

    @Override
    public void afterTextChanged(Editable s) {
        try {
            String str = String.format("%,d", Long.parseLong(s.toString()
                    .replaceAll(",", "")));
            int pos = editText.getSelectionStart();
    
            editText.removeTextChangedListener(this);
            editText.setText(str);
            editText.setSelection(pos);
            editText.addTextChangedListener(this);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }