2014-07-09 62 views
0

我有一個編輯文本,我想限制在該編輯文本中插入18和85之間的數字值。 我目前在我的編輯文本上使用這個InputFilter。但是沒有用,我限制編輯文本中的範圍之間的文本

public class InputFilterMinMax implements InputFilter { 

private int min, max; 

public InputFilterMinMax(int min, int max) { 
    this.min = min; 
    this.max = max; 
} 

public InputFilterMinMax(String min, String max) { 
    this.min = Integer.parseInt(min); 
    this.max = Integer.parseInt(max); 
} 

@Override 
public CharSequence filter(CharSequence source, int start, int end, 
     Spanned dest, int dstart, int dend) { 
    try { 
     // Remove the string out of destination that is to be replaced 
     String replacement = source.subSequence(start, end).toString(); 
     String newVal = dest.subSequence(0, dstart).toString() 
       + replacement 
       + dest.subSequence(dend, dest.length()).toString(); 
     int input = Integer.parseInt(newVal); 
     if (isInRange(min, max, input)) 
      return null; 
    } catch (NumberFormatException nfe) { 
    } 
    return ""; 
} 

private boolean isInRange(int a, int b, int c) { 
    return b > a ? c >= a && c <= b : c >= b && c <= a; 
} 
} 

請幫我..謝謝

+0

請學會在谷歌第一搜索:http://stackoverflow.com/questions/5391394/edittext-values-in-range – Dhaval

+0

HTTP://tech.chitgoks。 com/2011/06/27/android-set-min-max-value-an-edittext-accep/ – Dhaval

+0

http://stackoverflow.com/questions/14212518/is-there-any-way-to-define-a -min-and-max-value-for-edittext-in-android –

回答

0

您可以將TextWatcherEditText,然後偵聽文本的變化有,例如:

public void afterTextChanged(Editable s) { 
    try { 
    int val = Integer.parseInt(s.toString()); 
    if(val > 85) { 
     replace(0, length(), "85", 0, 2); 
    } else if(val < 18) { 
     replace(0, length(), "18", 0, 2); 
    } 
    } catch (NumberFormatException ex) { 
     // Do something 
    } 
} 
+0

請詳細說明replace()會在這裏做些什麼... – user2781627

0

你可以在這個editext上使用textwatcher來做你想做的事情,這將是一個簡單的方法來實現它。谷歌textwatcher在Android中,並嘗試執行它

0

試試這個它會幫助你

YuredittextObject.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>18&&num<85){ 
Toast.maketext(context,"Do not enter the values between 18 to 85",Toast.LENGTH_SHORT).show(); 
      }else{ 
      edittext.setText(""+num);    

      } 
     } 

    }); 
+0

它給出了一個stackoverflow錯誤,因爲它會導致遞歸調用onTextChanges .. – user2781627

+0

什麼錯誤可以你張貼 –