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

标签 java android

我正在尝试使用模式“9,999”(其中 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”。我必须按 3 次退格键 然后当我输入“11111”时,它将是“1,1111”

有什么想法吗?

最佳答案

您可以尝试将 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();
    }
}

关于java - 使用过滤器以编程方式设置 EditText 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960160/

相关文章:

java - 单击列表项后显示图像

java - 将 JSONArray 转换为 JSONObject 时发生 ClassCastException

java - 什么时候应该和不应该为了速度/性能而脱离 OOP?

java - 为什么Java和Applet中需要JNLP文件?

java - 使用 SAML 作为未加密 HTTP header 保护站点的桥梁

java - 使用 Shiro 的 Servlet 身份验证,是否可以过滤具有某些关键字的 URL?

java - 如何更改工具栏中的菜单图标重力?

java - regId 始终为空

java - 如何使用jsoup提取电子邮件ID?

android - 使用 Android Pie 时下载失败并出现错误 400