Android 中獲取EditText控制元件的焦點以及監聽他的內容讓焦點自動跳轉到下一個EditText控制元件
阿新 • • 發佈:2019-02-09
最近在弄EditText控制元件,監聽他的輸入內容,在輸入3個字元的時候就自動將焦點跳到另一個EditText文字框裡面,找了好久,才弄到程式碼:
xml 檔案:
java程式碼:<EditText android:id="@+id/edittext1" android:focusable="true" android:digits="@string/alphabet_and_number" android:inputType="number" android:layout_width="35dp" android:textSize="18dp" android:enabled="true" android:paddingLeft="2dp" android:textColor="@color/actionBarColorDark" android:background="@drawable/shape_three" android:layout_height="wrap_content" android:layout_below="@+id/textview" android:layout_alignStart="@+id/textview" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview3" android:text="設定伺服器ip和埠號:" android:textSize="18dp" android:textColor="@color/actionBarColorDark" android:layout_below="@id/edittext1" android:layout_alignStart="@+id/textview" /> <EditText android:layout_width="35dp" android:id="@+id/edittext2" android:textSize="18dp" android:focusable="true" android:enabled="true" android:paddingLeft="2dp" android:textColor="@color/actionBarColorDark" android:digits="@string/alphabet_and_number" android:inputType="number" android:background="@drawable/shape_three" android:layout_height="wrap_content" android:layout_below="@id/textview3" android:layout_alignStart="@+id/textview3" />
讓當前的activity 或者實現TextWatcher介面,重寫三個方法,程式碼如下:
FragFour extends Fragment implements TextWatcher{ editText1.addTextChangedListener(this);//給edittext設定游標改變的監聽 editText2.addTextChangedListener(this);//給edittext設定游標改變的監聽 /** * This method is called to notify you that, within <code>s</code>, * the <code>count</code> characters beginning at <code>start</code> * are about to be replaced by new text with length <code>after</code>. * It is an error to attempt to make changes to <code>s</code> from * this callback. * * @param s * @param start * @param count * @param after */ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } /** * This method is called to notify you that, within <code>s</code>, * the <code>count</code> characters beginning at <code>start</code> * have just replaced old text that had length <code>before</code>. * It is an error to attempt to make changes to <code>s</code> from * this callback. * * @param s * @param start * @param before * @param count */ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } /** * This method is called to notify you that, somewhere within * <code>s</code>, the text has been changed. * It is legitimate to make further changes to <code>s</code> from * this callback, but be careful not to get yourself into an infinite * loop, because any changes you make will cause this method to be * called again recursively. * (You are not told where the change took place because other * afterTextChanged() methods may already have made other changes * and invalidated the offsets. But if you need to know here, * you can use {@link Spannable#setSpan} in {@link #onTextChanged} * to mark your place and then look up from here where the span * ended up. * * @param s */ @Override public void afterTextChanged(Editable s) { Log.i("TAG","edittext1獲取到焦點了1"); if(editText1.getText().length() ==3){ editText2.requestFocus(); } if(editText2.getText().length() ==3){ editText3.requestFocus(); }if(editText3.getText().length() ==3) { editText4.requestFocus(); } } }