我有一个EditText,我想在其中显示货币:
input.setInputType(InputType.TYPE_CLASS_NUMBER);
input.addTextChangedListener(new CurrencyTextWatcher());
Run Code Online (Sandbox Code Playgroud)
有:
public class CurrencyTextWatcher implements TextWatcher {
boolean mEditing;
public CurrencyTextWatcher() {
mEditing = false;
}
public synchronized void afterTextChanged(Editable s) {
if(!mEditing) {
mEditing = true;
String digits = s.toString().replaceAll("\\D", "");
NumberFormat nf = NumberFormat.getCurrencyInstance();
try{
String formatted = nf.format(Double.parseDouble(digits)/100);
s.replace(0, s.length(), formatted);
} catch (NumberFormatException nfe) {
s.clear();
}
mEditing = false;
}
}
Run Code Online (Sandbox Code Playgroud)
我想用户看一个只有数字的键盘,这就是我打电话的原因
input.setInputType(InputType.TYPE_CLASS_NUMBER);
Run Code Online (Sandbox Code Playgroud)
在我的EditText上.但是,它不起作用.我看到输入的数字没有任何格式.但是:如果我不通过input.setInputType(InputType.TYPE_CLASS_NUMBER)设置inputType,则格式化工作完美.但是用户必须使用常规键盘,这不是很好.如何使用数字键盘并在EditText中查看正确的货币格式?谢谢.
Mus*_*ssa 23
最好使用InputFilter接口.使用正则表达式更容易处理任何类型的输入.我的货币输入格式解决方案:
public class CurrencyFormatInputFilter implements InputFilter {
Pattern mPattern = Pattern.compile("(0|[1-9]+[0-9]*)?(\\.[0-9]{0,2})?");
@Override
public CharSequence filter(
CharSequence source,
int start,
int end,
Spanned dest,
int dstart,
int dend) {
String result =
dest.subSequence(0, dstart)
+ source.toString()
+ dest.subSequence(dend, dest.length());
Matcher matcher = mPattern.matcher(result);
if (!matcher.matches()) return dest.subSequence(dstart, dend);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
有效期:
0.00,0.0,10.00,111.1无效:0,0.000,111,10,010.00,01.0
如何使用:
editText.setFilters(new InputFilter[] {new CurrencyFormatInputFilter()});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19085 次 |
| 最近记录: |