您的位置:首页 > 移动开发 > Android开发

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

2013-08-23 15:43 633 查看
类似于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);

}
}
});
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android EditText