第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

格式化貨幣輸入editText的更好方法?

格式化貨幣輸入editText的更好方法?

慕容3067478 2019-11-25 14:08:40
我有一個editText,起始值為$ 0.00。當(dāng)您按數(shù)字1時,它將變?yōu)? 0.01。按4,則變?yōu)? 0.14。按8,$ 1.48。按退格鍵,$ 0.14等??尚?,問題是,如果有人手動定位光標(biāo),則格式化會出現(xiàn)問題。如果他們要刪除小數(shù),它將不會返回。如果他們將光標(biāo)放在小數(shù)點前面并鍵入2,它將顯示$ 02.00而不是$ 2.00。例如,如果他們嘗試刪除$,它將刪除一個數(shù)字。這是我正在使用的代碼,我將不勝感激任何建議。mEditPrice.setRawInputType(Configuration.KEYBOARD_12KEY);    public void priceClick(View view) {    mEditPrice.addTextChangedListener(new TextWatcher(){        DecimalFormat dec = new DecimalFormat("0.00");        @Override        public void afterTextChanged(Editable arg0) {        }        @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().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))            {                String userInput= ""+s.toString().replaceAll("[^\\d]", "");                if (userInput.length() > 0) {                    Float in=Float.parseFloat(userInput);                    float percen = in/100;                    mEditPrice.setText("$"+dec.format(percen));                    mEditPrice.setSelection(mEditPrice.getText().length());                }            }        }    });
查看完整描述

3 回答

?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

我測試了您的方法,但是當(dāng)我使用大量數(shù)字時它失敗了……我創(chuàng)建了這個方法:


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

    }

}


查看完整回答
反對 回復(fù) 2019-11-25
?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

基于上述一些答案,我創(chuàng)建了一個MoneyTextWatcher,您可以按以下方式使用它:


priceEditText.addTextChangedListener(new MoneyTextWatcher(priceEditText));

這是課程:


public class MoneyTextWatcher implements TextWatcher {

    private final WeakReference<EditText> editTextWeakReference;


    public MoneyTextWatcher(EditText editText) {

        editTextWeakReference = new WeakReference<EditText>(editText);

    }


    @Override

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }


    @Override

    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }


    @Override

    public void afterTextChanged(Editable editable) {

        EditText editText = editTextWeakReference.get();

        if (editText == null) return;

        String s = editable.toString();

        if (s.isEmpty()) return;

        editText.removeTextChangedListener(this);

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

        BigDecimal parsed = new BigDecimal(cleanString).setScale(2, BigDecimal.ROUND_FLOOR).divide(new BigDecimal(100), BigDecimal.ROUND_FLOOR);

        String formatted = NumberFormat.getCurrencyInstance().format(parsed);

        editText.setText(formatted);

        editText.setSelection(formatted.length());

        editText.addTextChangedListener(this);

    }

}


查看完整回答
反對 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 588 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號