android怎样实现EditText和EditText自动跳转?
有多个EditText,然后限制每个EditText的输入字数,如为2个,当这个EditText里的字数大于2时,光标自动跳转到下一个EditText,这个代码怎么实现啊...
有多个EditText,然后限制每个EditText的输入字数,如为2个,当这个EditText里的字数大于2时,光标自动跳转到下一个EditText,这个代码怎么实现啊?求大神指导,谢谢了!
展开
展开全部
private ArrayList<EditText> mEditList = new ArrayList<EditText>();
定义一个动态数组存储EditText 可以在onCreate函数里把你界面上的若干EditText存储进去
之后为动态数组里面的每个EditText设置监听字数变化函数
for (int i = 0; i < mEditList.size(); i++) {
mEditList.get(i).addTextChangedListener(mTextWatcher);
}
这里的mTextWatcher就是输入文字变化监听器了,实现如下:
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.length() == 2) { //限定2个字符
int done_input_id = getCurrentFocus().getId();
for (int i = 0; i < mEditList.size(); i++) {
if (mEditList.get(i).getId() == done_input_id) {
int next_index = i + 1;
try {
EditText next_edit = mEditList.get(next_index);
next_edit.requestFocus();
} catch (Exception e) {
}
}
}
}
}
};
定义一个动态数组存储EditText 可以在onCreate函数里把你界面上的若干EditText存储进去
之后为动态数组里面的每个EditText设置监听字数变化函数
for (int i = 0; i < mEditList.size(); i++) {
mEditList.get(i).addTextChangedListener(mTextWatcher);
}
这里的mTextWatcher就是输入文字变化监听器了,实现如下:
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.length() == 2) { //限定2个字符
int done_input_id = getCurrentFocus().getId();
for (int i = 0; i < mEditList.size(); i++) {
if (mEditList.get(i).getId() == done_input_id) {
int next_index = i + 1;
try {
EditText next_edit = mEditList.get(next_index);
next_edit.requestFocus();
} catch (Exception e) {
}
}
}
}
}
};
追问
这样只是把光标跳转过去了,不能输入字符,输入的字符还是显示在前一个EditText里面,这个怎么解决啊?
展开全部
这个很简单啊,
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.i(TAG,"s:" + s + " s.length:" + s.length());
if(s.length() > 2)
{
et2.requestFocus();
}
}
}
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.i(TAG,"s:" + s + " s.length:" + s.length());
if(s.length() > 2)
{
et2.requestFocus();
}
}
}
追问
这样只是把光标跳转过去了,不能输入字符,输入的字符还是显示在前一个EditText里面,这个怎么解决啊?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询