当前位置: 首页 > 知识库问答 >
问题:

EditTexts之间的连续键入

璩浩广
2023-03-14

我有3个< code > edittext(et1,et2,et3),彼此相邻排列,其中< code>maxLength为“1”。

我的要求是:

> < li>

当在编辑文本中键入字母时(只能包含1个字符,因为最大长度为1),光标会自动转到下一个编辑文本。

类似地,当用户单击et2上的back时,光标应该转到et1。

编辑文本将按顺序填写。首先是第一个,然后是第二个,最后是第三个。因此,即使用户单击第三个编辑文本框

如何以编程方式实现这一点。

谢谢

共有2个答案

谭梓
2023-03-14

以下是您的问题答案:

    //findViewById and bla bla bla...

    editText1.addTextChangedListener(new TextWatcher() {



        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            editText1.setSelection(count); //set the cursor after the last character

        }




        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {


        }




        @Override
        public void afterTextChanged(Editable s) {



            if(editText1.length() == 1){ //check for number of characters

                editText1.clearFocus();

                editText2.requestFocus();

            }



        }




    });

    editText2.addTextChangedListener(new TextWatcher() {



        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            editText2.setSelection(count);


            if(editText1.length() != 1){ //check if previous editText is empty

                editText2.clearFocus();

                editText1.requestFocus();

            }



        }




        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {


        }




        @Override
        public void afterTextChanged(Editable s) {



            if(editText2.length() == 1){

                editText2.clearFocus();

                editText3.requestFocus();

            }



        }




    });


    editText3.addTextChangedListener(new TextWatcher() {



        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {


            editText3.setSelection(count);


            if(editText1.length() != 1){ //check if first editText is empty

                editText3.clearFocus();

                editText1.requestFocus();

            }



            else if(editText2.length() != 1){ //check if second editText is empty

                editText3.clearFocus();

                editText2.requestFocus();

            }



        }




        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {


        }




        @Override
        public void afterTextChanged(Editable s) {



            if(editText3.length() == 1){

                //Do something after the last editText was typed

            }



        }




    });








    //user pressed the back button
    @Override
    public void onBackPressed(){



        if(editText2.isFocused()){

            editText2.clearFocus();

            editText1.requestFocus();

        } 



        else if(editText3.isFocused(){

            editText3.clearFocus();

            editText2.requestFocus();

        } 



        else super.onBackPressed();



    }
景建业
2023-03-14

主要思想是使用TextWatcher。

您可以使用类似如下的内容:

et1.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
         et2.requestFocus;
         et1.setEnabled(false);
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});

et2.addTextChangedListener(new TextWatcher() {
        String textBeforeChange;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
          textBeforeChange = s.subSequence(start, start + count).toString();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
              if (s.subSequence(start, start + count).length == 0 
                   && textBeforeChange .length >= 1)
            et1.requestFocus();
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
 类似资料:
  • 本文向大家介绍连续和非连续内存分配之间的区别,包括了连续和非连续内存分配之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解连续和非连续内存分配之间的区别- 连续内存分配 在这种分配类型中,连续的内存块被分配给一个文件/进程。 与不连续的内存相比,它执行得更快。 易于通过操作系统进行控制。 开销最小,因为在执行进程时地址转换不多。 连续内存分配中存在内部碎片。 有不同类型的

  • 问题内容: 我有一个熊猫数据框如下 上面的数据帧有83000行。我想获取两个连续行之间的时间差,并将其保存在单独的列中。理想的结果是 我已经尝试过但出现错误,如下所示 如何解决这个问题 问题答案: 问题是功能需要s或s ,因此首先要转换为,然后得到并除以: 如果需要或每分钟:

  • 问题内容: 我有一个列表,我想找到连续元素之间的区别: 您将如何编码find_diff()函数?我可以使用“ for”迭代器对此进行编码,但是我敢肯定,有一种非常简单的方法可以使用一个简单的内衬进行编码。 问题答案: 您可以利用,并列出理解: 在性能方面,似乎并没有太大的差异:

  • 问题内容: 我试图用Java编写一个程序,该程序涉及使对象 从一次按键操作中不断移动。想一想吃豆子,在其中按下一次, 吃豆子继续上升直到您按下另一个键。 如果可能的话,我想保持代码简单。我的原始动作(一键按下=一动作)是这样的 : 值中的x和y是椭圆的位置。这完美地工作了,但是我 希望它只按一次 就可以继续运动,而不必按住它来保持运动。我尝试了一个带有布尔 参数的while循环,该布尔参数在tru

  • 我们正在构建一个应用程序来从传感器获取数据。数据流传输到Kafka,消费者将从Kafka发布到不同的数据商店。每个数据点都有多个表示传感器状态的属性。 在其中一个消费者中,我们希望仅当值发生更改时才将数据发布到数据存储。例如,如果有温度传感器,每10秒轮询一次数据,我们希望收到如下数据: 在上述情况下,只应发布第一条记录和第三条记录。 为此,我们需要某种方法来比较键的当前值与具有相同键的先前值。我

  • 我需要实施一个连续的任务时间表, 我通过Quartz通过,接下来的三次执行 但我希望02:45:00之后的下一次行刑是在03:30:00而不是03:00:00 有什么办法能做到吗