3

すべて-私は通貨形式にTextWatcherフォーマットするものを持っています:EditText

private String current = "";
public void onTextChanged(CharSequence s, int start, int before, int count) {
    if(!s.toString().equals(current)){
        editText$.removeTextChangedListener(this);

       String cleanString = s.toString().replaceAll("[$,.]", "");

       double parsed = Double.parseDouble(cleanString);           
       String formated = NumberFormat.getCurrencyInstance().format((parsed/100));          

       current = formated;
       editText$.setText(formated);
       editText$.setSelection(formated.length());

       editText$.addTextChangedListener(this);
    }
}

これはうまく機能します。問題は、EditText整数のみが必要なため、ユーザーがセントを入力できないことです。したがって、0.01 より 0.12 より 1.23 より 12.34 の代わりに、1,234 より 123 より 12 より 1 が必要です。小数点を取り除き、コンマを保持するにはどうすればよいですか? ありがとうございました。

4

4 に答える 4

9

ピリオドと末尾のゼロを削除してもかまわない場合は、次のようにすることができます。

    mEditText.addTextChangedListener(new TextWatcher() {
        private String current = "";

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!s.toString().equals(current)) {
                annualIncomeEntry.removeTextChangedListener(this);

                String cleanString = s.toString().replaceAll("[$,]", "");

                if (cleanString.length() > 0) {
                    double parsed = Double.parseDouble(cleanString);
                    NumberFormat formatter = NumberFormat.getCurrencyInstance();
                    formatter.setMaximumFractionDigits(0);
                    current = formatter.format(parsed);
                } else {
                    current = cleanString;
                }


                annualIncomeEntry.setText(current);
                annualIncomeEntry.setSelection(current.length());
                annualIncomeEntry.addTextChangedListener(this);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
    });

これにより、数値フォーマッタの最大小数桁がゼロに設定され、後続のすべてのゼロとピリオドが削除されます。また、入力されたすべての数値が整数になるように、100による除算を削除しました。

また、EditTextのinputTypeが "number"であることを確認してください。そうでない場合、ユーザーが数字以外の文字を入力しようとするとクラッシュします。

于 2012-11-21T01:23:19.213 に答える
0

金額をcurrencyFormatを使用してフォーマットしてから、文字列から.00を取り出してみませんか。

private static final ThreadLocal<NumberFormat> currencyFormat = new ThreadLocal<NumberFormat>() {
        @Override
        protected NumberFormat initialValue() {
            return NumberFormat.getCurrencyInstance();
        }
    };

currencyFormat.get()。format(<your_amount_here>)

于 2012-11-21T01:30:49.757 に答える
0

etProductCost.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.toString().length() == 1){
                //first number inserted.
                if (s.toString().equals(getString(R.string.currency_symbol))){
                    //if it is a currecy symbol
                    etProductCost.setText("");
                }else {
                    etProductCost.setText(getString(R.string.currency_symbol) + s.toString());
                    etProductCost.setSelection(s.toString().length());
                }
                return;
            }
            //set cursor position to last in edittext
            etProductCost.setSelection(s.toString().length());
        }

        @Override
        public void afterTextChanged(Editable s) {}
    });
于 2016-11-04T07:12:40.457 に答える