1. 程式人生 > >Android 中獲取EditText控制元件的焦點以及監聽他的內容讓焦點自動跳轉到下一個EditText控制元件

Android 中獲取EditText控制元件的焦點以及監聽他的內容讓焦點自動跳轉到下一個EditText控制元件

       最近在弄EditText控制元件,監聽他的輸入內容,在輸入3個字元的時候就自動將焦點跳到另一個EditText文字框裡面,找了好久,才弄到程式碼:

xml 檔案:

   <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" />
java程式碼:

     讓當前的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();
        }
    }
}