【问题标题】:EditText to Input Money AmountEditText 输入金额
【发布时间】:2016-06-02 21:31:02
【问题描述】:

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

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

  1. 假设用户输入100000,但我希望它自动显示100,000。和1000000 变成1,000,000

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

  3. 第三个问题是,既然这是钱,我们不能让用户一开始就输入0。

有什么想法吗?

到目前为止,我只能想出inputType=numberDecimal,这并没有真正的帮助。

非常感谢

PS:我不需要任何小数位

【问题讨论】:

标签: java android android-edittext textview


【解决方案1】:

如果你想用货币添加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);
    }
}

【讨论】:

    【解决方案2】:

    对于您的第一个问题,请点击此链接 Thousand separator

    第二个问题 将此添加到您的编辑文本中

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

    【讨论】:

    • 但是,不幸的是,一旦在 EditText 中有内容,用户就能够在金额的前缀中输入 0000。
    【解决方案3】:

    您可以实现一个或多个InputFilters 来对您的EditText 实施这些约束。可以使用EditTextsetFilters 方法在EditText 上附加多个过滤器。

    您也可以使用TextWatchers 来实现相同的目的。但是,使用InputFilter 更有意义,因为它允许您更改文本,而无需在每次更改输入后调用setText 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多