我正在开发销售点应用程序。
所以我想让用户输入购买金额
我们说用户输入100000
,但我希望它自动显示100,000
。并1000000
成为1,000,000
第二个问题是,我不希望用户能够自己输入.
。
第三个问题是,由于这是钱,我们不能让用户在开头输入0。
有什么想法吗?
到目前为止,我只能提出inputType=numberDecimal
,这实际上并没有用。
非常感谢
P.S。:我不需要任何小数位
答案 0 :(得分:2)
如果您想使用货币添加addTextChangedListener
到您想要的edittext,然后监控更改并重新格式化,这里是示例代码
private String current = "";
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!s.toString().equals(current)){
[your_edittext].removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,.]", "");
double parsed = Double.parseDouble(cleanString);
String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formatted;
[your_edittext].setText(formatted);
[your_edittext].setSelection(formatted.length());
[your_edittext].addTextChangedListener(this);
}
}
答案 1 :(得分:1)
您可以实施一个或多个InputFilter来强制执行EditText
上的约束。可以使用EditText
方法在setFilters
上附加多个过滤器。
您也可以使用TextWatcher来实现同样的目标。但是,使用InputFilter
会更有意义,因为它允许您更改文本,而无需在输入中进行每次更改后调用setText
方法。
答案 2 :(得分:1)
对于您的第一个问题,请点击此链接 Thousand separator
第二个问题 将此添加到您的editext
android:digits="0123456789"
android:inputType="numberDecimal"
对于你的第三个问题,你必须像这样使用TextWatcher
editText1.addTextChangedListener(new TextWatcher(){
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if (editText1.getText().toString().matches("^0") )
{
// Not allowed
Toast.makeText(context, "not allowed", Toast.LENGTH_LONG).show();
editText1.setText("");
}
}
@Override
public void afterTextChanged(Editable arg0) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
});