Android:编辑货币的文本验证

时间:2012-12-26 12:40:14

标签: android filter

我有一个编辑文本,用户可以在其中输入金额,我对编辑文本

的限制很少
  1. 金额不能大于100000
  2. 用户输入最多两位小数,例如99999.50
  3. -EDITED-解决了

    我如何实现这一目标,是否必须使用filter中的Regular Expression创建myEdittext.addTextChangedListener(new TextWatcher() ...或我可以实现此目标

    myAmountEditText.addTextChangedListener(new TextWatcher() {
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {}
    
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {}
    
                @Override
                public void afterTextChanged(Editable s) {
                  if(amount!=null && amount.length()>=1 ){
                    if(amount.contains(".")){
                        int indexOFdec =  amount.indexOf(".");
    
                        if(indexOFdec >=0) {
                           if(amount.substring(indexOFdec).length() >3){
                               amount = amount.substring(0, amount.length()-1);
                               myAmountEditText.setText(amount);
                               myAmountEditText.setSelection(myAmountEditText.getText().length());
                           }
                        }
                    }
    
                    Double a = Double.parseDouble(amount.toString());
    
                    if(a>0 && a<100000.00){
                        //my stuff
                    }else{
                        Toast.makeText(context, "amount greater than 100000", Toast.LENGTH_SHORT).show();
                    }
                }
            });
    

2 个答案:

答案 0 :(得分:1)

您可以使用此代码:

edittext.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {}

    public void beforeTextChanged(CharSequence s, int start, int count, int after){}

    public void onTextChanged(CharSequence s, int start, int before, int count){
        String strEnteredVal = edittext.getText().toString();

        if(!strEnteredVal.equals("")){
        int num=Integer.parseInt(strEnteredVal);
        if(num<100000){
         edittext.setText(""+num);
        }else{
         edittext.setText("");
        }
    }

}); 

我认为我们可以这样做:

String str = editText.getText().toString();

    int indexOFdec =  str.indexOf(".");

    if(indexOFdec >=0) {
       if(str.substring(indexOFdec).length() >2)
       {
           Toast.makeText(getApplicationContext(), "Print a message here", Toast.LENGTH_SHORT).show();
           return;
       }
    }

答案 1 :(得分:1)

您可以在xml代码中执行此操作。在xml中你指定E * ditText *把这两个标签放在那里

        android:inputType="numberDecimal"
    android:maxLength="7"

现在使用此代码通知用户他们可以在十进制之后放置超过2位数。

        txt1 = (EditText)findViewById(R.id.editText1);
    submit = (Button)findViewById(R.id.button2);

    submit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
               String str = txt1.getText().toString();

                int indexOFdec =  str.indexOf(".");

                if(indexOFdec >=0) {
                   if(str.substring(indexOFdec).length() >3)
                   {
                       Toast.makeText(getApplicationContext(), "put Only 2 digit after decimal", Toast.LENGTH_SHORT).show();
                       return;
                   }else{
                         Toast.makeText(getApplicationContext(), "Correct Number", Toast.LENGTH_SHORT).show();
                    }
                }

        }
    });
}

它会起作用。