2012-06-15 49 views
2

我必須實現一個應用程序,在該應用程序中,我爲輸入的PIN號碼和移動號碼設置了小的edittext。每個編輯文本一次包含1個字符。
現在,當我運行這個應用程序時,我發現每個盒子都需要關注每個edittext
所以在這種情況下,可以先在字符先輸入後在下一個edittext中設置焦點,然後在第二個字符輸入後轉到第三個。
所以請幫我解決這個問題在第一個框中輸入字符後,將焦點轉到下一個框

這是佈局圖像。

enter image description here

+2

實施TextWatcher您的EditText並獲得輸入的字符的長度時,其1只將焦點轉到下一個視圖。 – user370305

+0

你能給我例 –

+0

檢查http://www.technotalkative.com/android-about-edittext-textwatcher/ – GAMA

回答

3
1. implements TextWatcher on EditTexts 

,然後當你EDITTEXT的文本長度爲1

2. Change focus on other EditText using 

在其他的EditText呼叫requestFocus() ..

CODE:(此代碼是你的理解,它可能是在你的情況和你不同的需要)

public class LoginActivity extends Activity implements TextWatcher 
{ 
. 
. 
. 

    editTextUName = (EditText) findViewById(R.id.edttextusername); 
    editTextUName.addTextChangedListener(this); 
    editTextPwd = (EditText) findViewById(R.id.edttextpassword); 
    editTextPwd.addTextChangedListener(this); 

@Override 
public void afterTextChanged(Editable s) 
{ 
    if (s.toString().length() == 1) 
    { 
       editTextPwd.requestFocus(); 
    } 
} 
+0

可以請給我一個例子 –

+0

requestfocus –

+0

試試吧。並讓我知道發生了什麼.. – user370305

0

使用此代碼

final EditText EditText01 = (EditText) findViewById(R.id.editText01); 
final EditText EditText02= (EditText) findViewById(R.id.editText02); 
final EditText EditText03 = (EditText) findViewById(R.id.editText03); 
final EditText EditText04 = (EditText) findViewById(R.id.editText04); 

EditText01.requestFocus(); 
EditText01.setOnFocusChangeListener(new View.OnFocusChangeListener() { 

        @Override 
        public void onFocusChange(final View v, 
          final boolean hasFocus) { 

         if (hasFocus) { 
          final InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
          // only will trigger it if no physical keyboard is 
          // open 
          mgr.showSoftInput(EditText01, 
            InputMethodManager.SHOW_IMPLICIT); 
         } 

        } 
       }); 

     EditText01.setOnKeyListener(new View.OnKeyListener() { 

      @Override 
      public boolean onKey(final View v, final int keyCode, 
        final KeyEvent event) { 

       if (event.getAction() == KeyEvent.ACTION_DOWN) { 
        if (keyCode == KeyEvent.KEYCODE_DEL) { 
         EditText01.requestFocus(); 
        } else { 
         EditText02.requestFocus(); 
        } 
       } 
       return false; 
      } 
     }); 

     EditText02.setOnKeyListener(new View.OnKeyListener() { 

      @Override 
      public boolean onKey(final View v, final int keyCode, 
        final KeyEvent event) { 

       if (event.getAction() == KeyEvent.ACTION_DOWN) { 
        if (keyCode == KeyEvent.KEYCODE_DEL) { 
         EditText01.requestFocus(); 
        } else { 
         EditText03.requestFocus(); 
        } 
       } 
       return false; 
      } 
     }); 
     EditText03.setOnKeyListener(new View.OnKeyListener() { 

      @Override 
      public boolean onKey(final View v, final int keyCode, 
        final KeyEvent event) { 

       if (event.getAction() == KeyEvent.ACTION_DOWN) { 
        if (keyCode == KeyEvent.KEYCODE_DEL) { 
         EditText02.requestFocus(); 
        } else { 
         EditText04.requestFocus(); 
        } 

       } 
       return false; 
      } 
     }); 

     EditText04.setOnKeyListener(new View.OnKeyListener() { 

      @Override 
      public boolean onKey(final View v, final int keyCode, 
        final KeyEvent event) { 

       if (event.getAction() == KeyEvent.ACTION_DOWN) { 
        if (keyCode == KeyEvent.KEYCODE_DEL) { 
         EditText03.requestFocus(); 
        } 

       } 

       return false; 

      } 
     }); 
+0

你解決了你的問題嗎? – Jitendra

0

添加一個tex t改變聽衆

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

       textView2.requestFocus(); 

      } 

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

      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 
     }); 
0

這應該很好。 mPinFirst等是表示每個Pin條目的EditText。 還應該照顧退格。

mPinFirst.setOnKeyListener(onKeyListener); 
    mPinSecond.setOnKeyListener(onKeyListener); 
    mPinThird.setOnKeyListener(onKeyListener); 
    mPinFourth.setOnKeyListener(onKeyListener); 




View.OnKeyListener onKeyListener = new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View view, int i, KeyEvent keyEvent) { 

     if(KeyEvent.KEYCODE_DEL != keyEvent.getKeyCode()) { 
      if (((ESEditText) view).getText().length() == 1) 
       if (view.focusSearch(View.FOCUS_RIGHT) != null) { 
        view.focusSearch(View.FOCUS_RIGHT).requestFocus(); 
        return true; 
       } 
     }else{ 
      ((ESEditText) view).setText(""); 
      if (view.focusSearch(View.FOCUS_LEFT) != null) { 
       view.focusSearch(View.FOCUS_LEFT).requestFocus(); 
       return true; 
      } 
     } 
     return false; 
    } 
}; 
相關問題