OnEditTextChanger覆盖Android:输入法

时间:2012-01-23 18:57:04

标签: java android

使用我的onEditTextchanger。当用户输入100000时,它工作正常,在EditText框中,当用户输入时,它显示$ 100,000.00。哪个是对的。 但问题是,如果我尝试显示数字键盘而不是Qwerty键盘。通过在XML中添加我添加android:inputType =“numberDecimal”我丢失$和格式,并且EditText显示为100000.00。我注意到如果我将InputType更改为Number或Decimal也会发生这种情况。我附上了代码。 有任何想法吗?再次感谢您的帮助。

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" />

爪哇

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

    }

}

1 个答案:

答案 0 :(得分:1)

默认情况下,inputType =“numberDecimal”不接受除。(点)之外的任何特殊字符。也许你需要做一些破解才能完成这项工作。有一个有趣的SO讨论来破解特殊字符','。您可以尝试使用$符号。这是link