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(",", "");
**********
Novo Hamburgo - RS - Brasil
------------------
http://maicon.strey.nom.br/blog/
http://maicon.strey.nom.br/blog/netiqueta/
Linux user: #525086
------------------
On Wed, Apr 25, 2012 at 13:16, Felipe Aron <felipearon@gmail.com> wrote:
Galera, tenho um EditText com a seguinte estrutura:<EditTextandroid: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






0 comentários:
Postar um comentário