Android连续EditTexts

时间:2016-01-21 14:03:47

标签: android android-edittext

我在一个活动中有4个编辑文本,输入限制为3个字符 我希望实现行为,就像用户在之前的编辑文本中键入3个字符一样 - 下一次编辑应该自动获得焦点。 相反:当用户从上一个编辑文本的末尾开始删除时 - 用户可以删除所有先前字段中的字符而无需手动选择每个编辑文本。
实现这个的最简单方法是什么?

我只能考虑为每个EditText使用keyListenner,检查文本长度并在等于最大值时切换焦点。

这是正确的方式还是有其他解决方案?

3 个答案:

答案 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请参考以下链接

Link: Move focus to next edittext