2012-09-19 50 views
19

根據發佈的問題和答案How to automatically move to the next edit text in android,我使用代碼移動到下一個編輯框。移動到android中的下一個EditText

et1.addTextChangedListener(new TextWatcher() { 

    public void onTextChanged(CharSequence s, int start,int before, int count) 
    { 
     // TODO Auto-generated method stub 
     if(et1.getText().toString().length()==size)  //size as per your requirement 
     { 
      et2.requestFocus(); 
     } 
    } 
    public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

    } 

    public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
    } 

}); 

我現在面臨的問題是在情況下,我進入了錯事,那麼即使用戶明確要求重點,文本框移動到下一個由於在文本觀察者的代碼。有什麼我可以做,以防止這種情況發生?

+0

您可以使用:[KeyCode_Enter到明年的EditText(http://stackoverflow.com/questions/3019965/keycode-enter-to-next-edittext) –

回答

8

您可以檢查按下1號的EditText的關鍵,如果這是「Enter」鍵,然後將焦點移到下一個EditText上。

這可能會幫助您:KeyCode_Enter to next edittext

1

您還可以查看在您如果條件是正確的或不..

if(et1.getText().toString().length()==size)  //size as per your requirement 
    { 
     if(et1.gettext.toString().equals(somethingwhichyouhavecheck)) 
     { 

        et2.requestFocus(); 
     } 
     else 
     { 
     } 
    } 
+0

有絕對沒有什麼我可以檢查的。用戶決定要輸入什麼 – user1667307

+0

你說過我面臨的問題是萬一我輸入了錯誤信息。什麼是錯,什麼是寫?舉例說明。 –

+0

他的意思是說,如果他在EditText中限制文本的大小,那麼如果用戶輸入他不想輸入的內容,並且希望在寫完之後進行更正,那麼會造成不便。 – Hiral

2

您需要驗證用戶輸入,以滿足您的期望。如果符合,則只能撥打et2.requestFocu()

+0

問題是我自己不知道什麼是有效的和什麼不是有效的範圍(例如:所有四位數字都是有效的,如果用戶需要改變他輸入的內容非常麻煩) – user1667307

+0

會發生什麼情況你不要調用et2.requestFocus()?它仍然是你的下一個領域? – UVM

1

此代碼按預期工作。

etFName.setOnKeyListener(new OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if(etFName.getText().toString().length()==4 && keyCode == KeyEvent.KEYCODE_BACK) 
       { 
        typinget1 = true; 
       } 
       else if(etFName.getText().toString().length()==4 && typinget1==true)  //size as per your requirement 
       { 
        typinget1 = false; 
        etLName.requestFocus(); 

       } 
       else if(etFName.getText().toString().length()<=4 && typinget1==false) 
       { 
        typinget1 = true; 

       } 

       return false; 
      } 
     }); 
2

它爲我工作:

final EditText code1=((EditText)view.findViewById(R.id.code1)); 
    final EditText code2=((EditText)view.findViewById(R.id.code2)); 
    final EditText code3=((EditText)view.findViewById(R.id.code3)); 
    final EditText code4=((EditText)view.findViewById(R.id.code4)); 



    OnKeyListener key=new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(!((EditText) v).toString().isEmpty()) 
      v.focusSearch(View.FOCUS_RIGHT).requestFocus(); 

      return false; 
     } 
    }; 




    code1.setOnKeyListener(key); 
    code2.setOnKeyListener(key); 
    code3.setOnKeyListener(key); 
24

這可能是很晚了,但我有一個解決方案,它是更容易被接受。只需將此代碼添加到layout.xml文件中的edittext字段。將其添加到編輯文本中,您想要顯示下一個按鈕而不是完成按鈕。所以它會指向下一個Edittext字段。

android:imeOptions="actionNext" 
+1

對於字母數字輸入(edittext的默認設置),還需要添加android:singleLine =「true」 – Kay

-3

我對這個非常簡單的解決方案只是把下列財產中的XML的EditText控制

安卓的inputType = 「textPersonName」

11

如果你想專注於進入下一步的EditText您可以在XML代碼中使用這些選項來關注下一個EditText:

選項1:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:imeOptions="actionNext" 
    android:singleLine="true"/> 

選項2:

<EditText 
    android:id="@+id/et1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:nextFocusForward="@+id/et2"/> 

<EditText 
    android:id="@+id/et2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true"/> 
相關問題