我在一个活动中有4个编辑文本,输入限制为3个字符
我希望实现行为,就像用户在之前的编辑文本中键入3个字符一样 - 下一次编辑应该自动获得焦点。
相反:当用户从上一个编辑文本的末尾开始删除时 - 用户可以删除所有先前字段中的字符而无需手动选择每个编辑文本。
实现这个的最简单方法是什么?
我只能考虑为每个EditText使用keyListenner,检查文本长度并在等于最大值时切换焦点。
这是正确的方式还是有其他解决方案?
答案 0 :(得分:1)
我认为这也是最好的方式。
我会尝试类似的东西:
firstText.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(CharSequence s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){
if(s.toString().length() == 3){
sedoncText.setFocusableInTouchMode(true);
sedoncText.requestFocus();
}
}
});
我没有测试过,所以可能有些功能拼写错误。
希望它有所帮助。
答案 1 :(得分:1)
您可以将TextWatcher用于此作业。 一段简短的代码段:
editTextA.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// implement your logic here
// e.g. Set cursor to the end of another Textfield:
if (s.toString().length() > 2){
int position = editTextB.length();
editTextB.setSelection(position);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
对于您的任务,每个EditText都需要自己的TextWatcher(包括规范逻辑)。
更新:
删除时如何切换EditText的简短(未经测试)的想法:
private boolean isEditTextVirgin;
isEditTextVirgin = true;
editTextB.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Check if the TextView is filled before editing
// if yes then save this information for later
if (s.toString().length() > 0){
isEditTextVirgin = false;
}
}
@Override
public void afterTextChanged(Editable s) {
// Check if the EditText is empty after a edit and if it was filled before
// if both yes then jump the the previous EditText
if (s.toString().length() == 0 && isEditTextVirgin == false){
int position = editTextA.length();
editTextA.setSelection(position);
// if you want you can reset your variable
// isEditTextVirgin = true;
}
}
});
您正在成员变量中保存状态(如果已填写edittext)。
答案 2 :(得分:1)
在EditText中添加
android:maxLength="3"
这不允许超过3个字符的输入。
关注下一个edittext请参考以下链接