我正在尝试使用模式“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/