android: EditText 输入固定位数后光标自动移动到下一EditText

来源:互联网 发布:房屋设计图软件 编辑:程序博客网 时间:2024/05/21 10:11

类似于Windows输入IP地址的效果,输入三位后光标自动定位到下一格进行输入。

以下为布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="horizontal" >        <EditText          android:id="@+id/editText1"          android:layout_width="50dp"          android:layout_height="wrap_content"          android:layout_weight="1"          android:ems="10"          android:inputType="number" >            <requestFocus />      </EditText>        <EditText          android:id="@+id/editText2"          android:layout_width="50dp"          android:layout_height="wrap_content"          android:layout_weight="1"          android:ems="10"          android:inputType="number" />        <EditText          android:id="@+id/editText3"          android:layout_width="50dp"          android:layout_height="wrap_content"          android:layout_weight="1"          android:ems="10"          android:inputType="number" />        <EditText          android:id="@+id/editText4"          android:layout_width="50dp"          android:layout_height="wrap_content"          android:layout_weight="1"          android:ems="10"          android:inputType="number" />     </LinearLayout>  


以下为.Java文件

package com.chuanchuan.edittextdemo;  import android.os.Bundle;  import android.text.Editable;  import android.text.TextWatcher;  import android.widget.EditText;  import android.app.Activity;  public class MainActivity extends Activity {        private EditText et1;      private EditText et2;      private EditText et3;      private EditText et4;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);                    et1=(EditText) findViewById(R.id.editText1);          et2=(EditText) findViewById(R.id.editText2);          et3=(EditText) findViewById(R.id.editText3);          et4=(EditText) findViewById(R.id.editText4);                    final EditText[] mArray = new EditText[] { et1,et2, et3, et4 };                    for (int i = 0; i < mArray.length; i++) {              final int j = i;              mArray[j].addTextChangedListener(new TextWatcher() {                  private CharSequence temp;                  private int sStart;                  private int sEnd;                    @Override                  public void onTextChanged(CharSequence s, int start,                          int before, int count) {                      temp = s;                  }                    @Override                  public void beforeTextChanged(CharSequence s, int start,                          int count, int after) {                  }                    @Override                  public void afterTextChanged(Editable s) {                      sStart = mArray[j].getSelectionStart();                      sEnd = mArray[j].getSelectionEnd();                        if (temp.length() == 3 && (j == 0 || j == 1 || j == 2)) {                          mArray[j + 1].setFocusable(true);                          mArray[j + 1].setFocusableInTouchMode(true);                          mArray[j + 1].requestFocus();                      }                      if (temp.length() > 3) {                            s.delete(sStart - 1, sEnd);                          int tSelection = sStart;                          mArray[j].setText(s);                          mArray[j].setSelection(tSelection);                        }                  }              });          }           }  }  


原创粉丝点击