8

Mam numer edittext, otrzymuję tylko numeryczne bez liczb dziesiętnych.Jak sformatować dane wejściowe edycji EditText podczas pisania za pomocą separatorów tysięcy (,) w systemie Android?

android:inputType="number" 

Chcę oddzielić tysiące podczas pisania. Na przykład 25 000.

Wiem, że powinienem użyć TextWatcher i Użyłem tego kodu, ale nie mogłem uczynić go pracy:

@Override 
     public void afterTextChanged(Editable viewss) { 
      String s = null; 
      try { 
       // The comma in the format specifier does the trick 
       s = String.format("%,d", Long.parseLong(viewss.toString())); 
      } catch (NumberFormatException e) { 
      } 

     } 

mógłbyś mi pomóc to zrobić?

Odpowiedz

11

przetestować ten przykład:

import java.text.DecimalFormat; 
import java.text.ParseException; 

import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.EditText; 

public class NumberTextWatcher implements TextWatcher { 

    private DecimalFormat df; 
    private DecimalFormat dfnd; 
    private boolean hasFractionalPart; 

    private EditText et; 

    public NumberTextWatcher(EditText et) 
    { 
     df = new DecimalFormat("#,###.##"); 
     df.setDecimalSeparatorAlwaysShown(true); 
     dfnd = new DecimalFormat("#,###"); 
     this.et = et; 
     hasFractionalPart = false; 
    } 

    @SuppressWarnings("unused") 
    private static final String TAG = "NumberTextWatcher"; 

    @Override 
    public void afterTextChanged(Editable s) 
    { 
     et.removeTextChangedListener(this); 

     try { 
      int inilen, endlen; 
      inilen = et.getText().length(); 

      String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), ""); 
      Number n = df.parse(v); 
      int cp = et.getSelectionStart(); 
      if (hasFractionalPart) { 
       et.setText(df.format(n)); 
      } else { 
       et.setText(dfnd.format(n)); 
      } 
      endlen = et.getText().length(); 
      int sel = (cp + (endlen - inilen)); 
      if (sel > 0 && sel <= et.getText().length()) { 
       et.setSelection(sel); 
      } else { 
       // place cursor at the end? 
       et.setSelection(et.getText().length() - 1); 
      } 
     } catch (NumberFormatException nfe) { 
      // do nothing? 
     } catch (ParseException e) { 
      // do nothing? 
     } 

     et.addTextChangedListener(this); 
    } 

    @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().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()))) 
     { 
      hasFractionalPart = true; 
     } else { 
      hasFractionalPart = false; 
     } 
    } 

} 

Aby go użyć, aby dodać TextChangedListener komponentu EditText.

editText.addTextChangedListener(new NumberTextWatcher(editText)); 
+0

Jak dodać zera wiodące do tekstu? Chcę pokazać tekst taki jak 0939 – FarshidABZ

+0

@FarshidABZ Nie wiem, że nie pracuję teraz z Androidem. –

Powiązane problemy