0

Using my onEditTextchanger. It works fine when the user inputs 100000, in the EditText box it shows $100,000.00 as the user types. Which is correct. The problem is however if I try to display a numeric keyboard rather than a Qwerty keyboard. By adding in the XML I add android: inputType=”numberDecimal” I lose the formatting of $ and the, and the EditText displays like 100000.00. I have noticed this happens if I change the InputType to Number or Decimal as well. I have attached the code. Any ideas? Again Thanks in advance for your help.

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Number1"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/txta"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="0" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Number2" />

<EditText
    android:id="@+id/txtb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="0" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Number3" />

<TextView
    android:id="@+id/txtc"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Your Answer is"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/txtd"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/buttonCalc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Calculate" />

Java

public class CalcTestActivity extends Activity {
    private EditText txta;
    private EditText txtb;
    private TextView txtc;
    private TextView txtd;


    private double a = 0;
    private double b = 0;
    private double c = 0;
    private double d = 0;

    private Button buttonCalc;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initControls();

        txta.addTextChangedListener(new CurrencyTextWatcher());
        txtb.addTextChangedListener(new CurrencyTextWatcher());

    }   



    private void initControls() {

        txta = (EditText)findViewById(R.id.txta);
        txtb = (EditText)findViewById(R.id.txtb);
        txtc = (TextView)findViewById(R.id.txtc);
        txtd = (TextView)findViewById(R.id.txtd);

        buttonCalc = (Button)findViewById(R.id.buttonCalc);
        buttonCalc.setOnClickListener(new Button.OnClickListener() {

            public void onClick(View v) {calculate(); }});}

    private void calculate() {

        a=Double.parseDouble(txta.getText().toString().replace("$", "").replace(",", ""));
        b=Double.parseDouble(txtb.getText().toString().replace("$", "").replace(",", ""));
        c=Math.round(a*.88);                
        txtc.setText(GlobalMoney.FormatValue(c));
        d=Math.round((a*.87)+(b*.61)*(c*.25));
        txtd.setText(GlobalMoney.FormatValue(d));
    }


}

TextWatcher

import java.text.NumberFormat;
import android.text.Editable;
import android.text.TextWatcher;

public class CurrencyTextWatcher implements TextWatcher {

    boolean mEditing;

    public CurrencyTextWatcher() {
        mEditing = false;
    }

    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if(!mEditing) {
            mEditing = true;

            String digits = s.toString().replaceAll("\\D", "");
            NumberFormat nf = NumberFormat.getCurrencyInstance();
            try{
                String formatted = nf.format(Double.parseDouble(digits)/100);
                s.replace(0, s.length(), formatted);
            } catch (NumberFormatException nfe) {
                s.clear();
            }

            mEditing = false;
        } 
    }
    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) {
        // TODO Auto-generated method stub

    }

}
Calvin
  • 81
  • 2
  • 9

1 Answers1

1

By default, inputType=”numberDecimal” doesn't accept any special characters except .(dot). May be you need to do some hack to make this work. There is an interesting SO discussion to hack in special character ','. You may try that to have $ symbol. Here is link.

Community
  • 1
  • 1
kosa
  • 65,990
  • 13
  • 130
  • 167
  • Thanks think I checked the link you gave me. That fixes part of the problem,But I am looking on how to implement a numeric keyboard rather that a full qwerty that comes up. Ideas? – Calvin Jan 24 '12 at 01:14
  • I have never done this, but this link may be useful. http://stackoverflow.com/questions/1654901/does-android-have-a-numeric-keypad – kosa Jan 24 '12 at 01:20
  • Thanks again Thinksteep. You got me pointed in the right direction, and your fix did help with my edittext problem. – Calvin Jan 24 '12 at 13:50
  • Glad it helped you. Enjoy programming. – kosa Jan 24 '12 at 13:51