2017-09-23 1 views
1

나는 지불을 위해 EditText를 구현했습니다. 입력 한 숫자에 따라 그 금액이 초기 금액에서 뺀 다음 위의 TextView에 TextWatcher를 통해 표시됩니다. enter image description here입력 할 때 숫자 입력 유효성 확인

enter image description here

enter image description here

나는 이것을 달성하기 위해 TextWatcher를 사용하고 있습니다. 입력 된 값이 가격보다 더 많은 경우)

1 :

et_EnterInstallment.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      //To decrease the amount entered from the price (amount as displayed in textview) 
      String editTextValue = et_EnterInstallment.getText().toString(); 

      if(!editTextValue.isEmpty()) { 
       int mainPrice = Integer.parseInt(price); 
       int enteredPrice = Integer.parseInt(et_EnterInstallment.getText().toString()); 

       int valueAfterDeduction = mainPrice - enteredPrice; 

       tv_Price.setText(String.valueOf(valueAfterDeduction)); 
      } else { 
       tv_Price.setText(price); 
      } 
     } 
    }); 

어떻게 다음 달성하기 위해 글고 값의 유효성을 검사 할 수 있습니다. 어떤 경우에 사용자는 필드에 해당 번호를 입력 할 수 없습니다 (가격이 3000이고 사용자가 350을 입력하고 다른 0을 입력하려고하면 가격이 더 높아져서 0 또는

+0

다음 답변을 따르십시오. 그것은 나를 위해 작동합니다. https://stackoverflow.com/a/14212734/3822391 – Avinash

답변

2

의 키 supress에 구현 입력에서 사용자를 사용 안 함 글고 치기에 그 값)

2)를 입력합니다. 입력 내용을 확인함으로써 변경됩니다.

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 

    if(new String(s.toString()).equals("")){ 
     // we don't want to try and parse an empty string to int or 
     // check for changes when the input is deleted. 

    } 
    else if(new String(s.toString()).equals("0")){ 

     et_EnterInstallment.setText(""); 

     Toast.makeText(context,"Do not enter an amount starting with 0", 
       Toast.LENGTH_LONG).show(); 


    } 
    else if(Integer.parseInt(s.toString()) >3000){ // put price in there. 
     et_EnterInstallment.setText(s.toString().substring(0, s.toString().length() - 1)); 
     et_EnterInstallment.setSelection(et_EnterInstallment.length()); 
     Toast.makeText(context,"You cannot enter an installment " + 
         "greater than the total", 
       Toast.LENGTH_LONG).show(); 

    } 
} 

에만 XML에서 숫자 입력을 허용하는 것을 잊지 마세요 : 가격이를 테스트하기 위해
android:inputType="number" 

나는 하드 코드 된 값을 사용했다.

간단한 github sample.

+1

정말 고마워요!. 이것은 매우 효율적입니다. 끝에'et_EnterInstallment.setSelection (et_EnterInstallment.length()); '줄을 추가하여 커서를 끝으로 설정했습니다. – Zx5

+0

@ Zx5 아 그렇습니다! 좋은 발견. git 허브 코드도 업데이트 할 것이다. –

-1

00 당신이가는대로 이것은 귀하의 의견의 타당성을 검증 글고

+0

몇 가지 세부 정보를 추가하십시오. –

+1

@IntelliJAmiya 너무 많은 질문에 대답하지 않는 답변. –

+0

@Yvette Colomb, 나는 그걸 알아 채지 못했습니다. 나는 단지 미안한 오류를 표시하는 것을 생각했습니다 .... –

-1
et_EnterInstallment.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      String editTextValue = et_EnterInstallment.getText().toString(); 
      if (!editTextValue.isEmpty()) { 
       if (editTextValue.length()>0&& editTextValue.charAt(0)=='0') { 
        s.replace(0, 1, ""); 
        et_EnterInstallment.setError("Please enter valid number"); 
       } else { 
        int mainPrice = Integer.parseInt(price); 
        int enteredPrice = Integer.parseInt(et_EnterInstallment.getText().toString()); 

        if (enteredPrice > mainPrice) { 
         s.clear(); 
         et_EnterInstallment.setError("Please enter valid number"); 
        } else { 
         int valueAfterDeduction = mainPrice - enteredPrice; 

         tv_Price.setText(String.valueOf(valueAfterDeduction)); 
        } 
       } 
      } 
     } 
    }); 
+0

입력 된대로 입력을 확인하지 않습니다 –