標籤:
在edittext中你在輸入1123456789過程中自動顯示為1,123,456,789這種千分位格式的。那麼我們該怎麼做呢? 查閱Android edittext api發現它有這樣一個方法addTextChangedListener,這個方法就是用來監聽使用者在輸入過程中的事件監聽,它會重寫這幾個方法:
- editText.addTextChangedListener(new TextWatcher() {
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
-
- }
- });
不難發現。從字面意思理解我們需實現這個功能就需要在afterTextChanged()這個方法中寫我們的邏輯代碼,代碼如下:
- @Override
- ublic void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
- if (!StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))) {
- editText.setText(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText));
- editText.setSelection(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText).length());
- }
StringUtils.addComma這個方法我是寫成了一個協助類,方便重複調傭
- public static String touzi_ed_values22 = "";
-
- /**
- * 在數字型字串千分位加逗號
- * @param str
- * @param edtext
- * @return sb.toString()
- */
- public static String addComma(String str,EditText edtext){
-
- touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");
-
- boolean neg = false;
- if (str.startsWith("-")){ //處理負數
- str = str.substring(1);
- neg = true;
- }
- String tail = null;
- if (str.indexOf(‘.‘) != -1){ //處理小數點
- tail = str.substring(str.indexOf(‘.‘));
- str = str.substring(0, str.indexOf(‘.‘));
- }
- StringBuilder sb = new StringBuilder(str);
- sb.reverse();
- for (int i = 3; i < sb.length(); i += 4){
- sb.insert(i, ‘,‘);
- }
- sb.reverse();
- if (neg){
- sb.insert(0, ‘-‘);
- }
- if (tail != null){
- sb.append(tail);
- }
- return sb.toString();
- }
代碼中,我定義了一個靜態變數touzi_ed_values22是為了方便與activity中的StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))做判斷,判斷在輸入過程中是否不同,也就是數值改變了,如果改變了,那麼就會調用addComma()方法返回新的字串數值賦值給edittext。其中addComma中的touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");非常關鍵。它是為了不斷擷取當前數值與返回後的數值進行比較,如果沒有這句代碼。你的app將再edittext輸入時就會出現卡死現象,因為你的touzi_ed_values22是永遠為空白的。在作比較的時候會進入該方法,就會無限賦值無限判斷。
edittext實現顯示千分位格式