2013-01-22 78 views
5

我想爲EditText框設置最小和最大輸入值。我正在爲EditText創建一個簡單的驗證;它需要A-Z和0-9值,最少5個,最多8個字符。如何在Android中爲EditText設置最小字符數和最大字符數限制?

我設置的最大和其他驗證如下:

<EditText 
     android:id="@+id/edittextKode_Listing" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="5dp" 
     android:layout_marginLeft="5dp" 
     android:layout_alignTop="@+id/textKode_listing" 
     android:layout_toRightOf="@+id/textKode_listing" 
     android:maxLength="8" 
     android:inputType="textCapCharacters" 
     android:digits="0,1,2,3,4,5,6,7,8,9,ABCDEFGHIJKLMNOPQRSTVUWXYZ" 
     /> 

,但不能設置最小值要求。我的EditText框處於警告對話框中。我試了下面的代碼來解決這個問題:

private void openInboxDialog() { 

     LayoutInflater inflater = this.getLayoutInflater(); 
     // declare dialog view 
     final View dialogView = inflater.inflate(R.layout.kirim_layout, null); 

     final EditText edittextKode = (EditText) dialogView.findViewById(R.id.edittextKode_Listing); 
     final EditText edittextalamat = (EditText) dialogView.findViewById(R.id.edittextAlamat); 
     edittextKode.setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       // TODO Auto-generated method stub 

       if(edittextKode.getText().toString().length() > 0){ 
        if(edittextKode.getText().toString().length() < 5) 
        { 
         edittextKode.setError("Error"); 
         Toast.makeText(GPSActivity.this, "Kode listing value not be less than 5", Toast.LENGTH_SHORT).show(); 
         edittextKode.requestFocus(); 

        } 
       } 
      } 
     }); 
     final AlertDialog.Builder builder = new AlertDialog.Builder(GPSActivity.this); 
     builder.setTitle("Kirim").setView(dialogView) 
       .setNeutralButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         gpsCoordinates = (TextView) findViewById(R.id.text_GPS_Coordinates); 
         kode = edittextKode.getText().toString(); 
         alamat = edittextalamat.getText().toString(); 
         catatan = edittextcatatan.getText().toString(); 
         pengirim = edittextPengirim.getText().toString(); 
         if (kode.length() > 0 && alamat.length() > 0 
           && catatan.length() > 0 && pengirim.length() > 0) { 
          message = "Kode listing : " + kode + "\nAlamat : " 
            + alamat + " \nCatatan : " + catatan + " \n Pengirim : " + pengirim 
            + "\nKoordinat GPS : " 
            + gpsCoordinates.getText().toString(); 
           sendByGmail(); 
         } else { 
          Toast.makeText(
            getApplicationContext(), 
            "Please fill all three fields to send mail", 
            Toast.LENGTH_LONG).show(); 
         } 
        } 
       }); 
     builder.create(); 
     builder.show(); 
    }` 

在這個警報對話框中,我有兩個EditText框。我想在第一個EditText上應用我的驗證。我打電話給setOnFocusChangeListener檢查焦點更改的最小長度。如果長度小於5則請求焦點,但仍然鍵入第二個EditText框。

任何人都可以請幫助我。

回答

-1

沒有直接的方法來做到這一點,據我所知,唯一的方法就是當編輯文本失去焦點時,或者當用戶提交信息時,你做了長度檢查,看看它是否小於5個字符,例如

if (myTextBox.length() < 5) 
{ 
Log.d("APP", "Sorry, you need to enter at least 5 characters"; 
} 
else 
{ 
Log.d("APP", "Input valid"); 
} 
+0

ya我試試這個你可以在我的代碼中看到這個編輯文本當我點擊第二個edittext光標不會去第一個編輯文本 – nishitpatel

+0

對不起,我錯過了,看不出爲什麼它不會請求焦點在文本框中,雖然,我想知道.setError()是否與它有關,它可能是值得考慮的,並重新測試,看看焦點是否工作然後 – Boardy

+0

thanx爲您的答案我也嘗試.setError()但仍然轉到下一個edittext – nishitpatel

-2

你可以做這樣的事情的方式....在此我檢查了字符長度,如果大於5,則EDITTEXT失去focus..and觸摸之後在它回來的焦點..Try這個..我希望這將幫助你..

edittextKode.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 
      if(arg0.length()>5) 
      { 
       Toast.makeText(getApplicationContect(),"Max.value is 5",1).show(); 
        edittextKode.setFocusable(false); 
      } 

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

edittextKode.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent arg1) 
     { 
      // TODO Auto-generated method stub 
      edittextKode.setFocusableInTouchMode(true); 
      return false; 
     } 
    }); 
-3

你可以試試下面的代碼裏面聽衆:

如果條件不滿足,

edittextKode.setFocus(true) ; 
edittextKode.setFocusableInTouchMode(true) ; 
edittextalamat.setFocus(false) ; 
edittextalamat.setFocusableInTouchuha(false) ; 
edittextKode.requestFocus(); 
0
InputFilter[] lengthFilter = new InputFilter[1]; 
lengthFilter[0] = new InputFilter.LengthFilter(9); //Filter to 9 characters 
mEditText.setFilters(lengthFilter); 

這會創建一個過濾器來限制字符數。

+0

這限制了最大長度,而不是最小。此外,僅適用於API 23+。 –

相關問題