Formatar EditText com virgula

1,397 views
Skip to first unread message

Felipe Aron

unread,
Apr 25, 2012, 12:16:12 PM4/25/12
to androidb...@googlegroups.com
Galera, tenho um EditText com a seguinte estrutura:

<EditText
        android:id="@+recto_financeiro/edtPagoAVista"
        android:layout_width="160dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+recto_financeiro/tvDeveValor"
        android:inputType="numberDecimal"
        android:digits="0123456789.,"
        android:layout_marginRight="4dp" />

Estou querendo aplicar uma máscara monetária, para o valor 1250.00 ficar 1.250,00. (Trocar ponto por virgula)

Até onde entendi preciso criar um TextWatcher para isso, mas não faço ideia de como adicionar tal máscara.

Outra questão é, como tratar o valor real para cálculos? O valor apresentado ficará 1.250,00 - porém para efeito de calculo deve pegar 1250.00. Como fazer isso?

Agradeço a ajuda desde já.
 
--
Analista-Programador

Maicon Strey

unread,
Apr 25, 2012, 2:43:37 PM4/25/12
to androidb...@googlegroups.com
Segue como eu resolvi:
Se alguém tiver uma forma mais fácil manda ai.
Pode ser uma grande gambiarra mas funciona.

**********
private String current = "";

txtPreco.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
 // TODO Auto-generated method stub
}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {

if(!s.toString().equals(current)){
txtPreco.removeTextChangedListener(this);
 String precoString = s.toString().replaceAll("[R$.]", "");
 precoString = precoString.replaceAll(",", ".");
 Double precoDouble = 0.0;
 if (s.length() > current.length()){
  precoDouble = Double.valueOf(precoString);
  precoDouble = precoDouble * 10;
 }
 if (s.length() < current.length()){
  precoDouble = Double.valueOf(precoString);
  precoDouble = precoDouble / 10;
 }
 precoString = precoDouble.toString();
 NumberFormat formatoReal = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
 String formatado = formatoReal.format(Double.valueOf(precoString));
 txtPreco.setText(formatado);
 current = formatado;
 txtPreco.setText(formatado);
 txtPreco.setSelection(formatado.length());
 txtPreco.addTextChangedListener(this);
}
});
**********
Pra voltar pro formato Double:
**********
String precoDouble = txtPreco.getText().toString().replaceAll("[R$.]", "");
precoDouble = precoDouble.replaceAll(",", ".");
NumberFormat formatoDouble = NumberFormat.getNumberInstance(new Locale("en", "US"));
String formatado = formatoDouble.format(Double.valueOf(precoDouble)).replaceAll(",", "");
**********

Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
http://maicon.strey.nom.br/blog/ 
http://maicon.strey.nom.br/blog/netiqueta/ 
Linux user: #525086
------------------

Felipe Aron

unread,
Apr 25, 2012, 3:31:57 PM4/25/12
to androidb...@googlegroups.com
Fala ai Maicon blz?!

Cara valeu pela dica. Vou tratar aqui no projeto... mas cara, que "pé no saco" isso ein... deveria ter algo simples pra tratamento né?! :D

Valeu amigo.

Leonardo Jobim

unread,
Apr 25, 2012, 3:39:55 PM4/25/12
to androidb...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages