EditText输入金额

时间:2016-02-21 13:55:24

标签: java android android-edittext textview

我正在开发销售点应用程序。

所以我想让用户输入购买金额

  1. 我们说用户输入100000,但我希望它自动显示100,000。并1000000成为1,000,000

  2. 第二个问题是,我不希望用户能够自己输入.

  3. 第三个问题是,由于这是钱,我们不能让用户在开头输入0。

  4. 有什么想法吗?

    到目前为止,我只能提出inputType=numberDecimal,这实际上并没有用。

    非常感谢

    P.S。:我不需要任何小数位

3 个答案:

答案 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) {}
});