1

我有一个编辑文本,我想知道光标是否移动到下一行,如果它移动到下一行我想调用一个新函数。我怎样才能做到这一点?有没有一种方法或函数可以让我知道光标已移动到下一行?

PS:我正在使用文本观察器来实现大写和小写功能

scene.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int i, int j, int k) {
                if(flag!=0)
                {
                    flag=1;
                    strcheck = s.toString().charAt(s.length()-1);

                    int line = getCurrentCursorLine(scene);


                    lineno = line;




                    if(strcheck=='\n' && ib1==true){
                        ib22(scene, lineno);

                    }   else if(strcheck=='\n' && ib2==true){

                        ib22(scene, lineno);

                    }   else if(strcheck=='\n' && ib3==true){

                        ib55(scene, lineno);

                    }   else if(strcheck=='\n' && ib4==true){

                        ib55(scene, lineno);

                    }   else if(strcheck=='\n' && ib5==true){

                        ib33(scene, lineno);

                    }   else if(strcheck=='\n' && ib6==true){

                        ib11(scene, lineno);

                    }   else if(strcheck=='\n' && ib7==true){

                        ib22(scene, lineno);

                    }   else if(strcheck=='\n' && ib1==false && ib2==false && ib3==false && ib4==false && ib5==false && ib6==false && ib7==false){

                        ib22(scene, lineno);

                    }



                    //int start = scene.getLayout().getLineStart(lineno);
                    //int end = scene.getLayout().getLineEnd(lineno);
                    //String previous = (start<1 && lineno==0)?"":scene.getText().toString().substring(0, start);


                    if (nowUpper){
                        flag = 0;
                        strcheck = Character.toUpperCase(strcheck);
                        scene.setText(scene.getText().toString().substring(0,scene.length()-1) + strcheck);
                        //scene.setText(previous + scene.getText().toString().substring(start, end).toUpperCase());
                        scene.setSelection(scene.getText().length());
                    }


                    else if (nowLower){
                        strcheck = Character.toLowerCase(strcheck);
                    }

                }
                else{
                    flag=1;
                }
            }

            public void afterTextChanged(Editable editable) {

            }

            public void beforeTextChanged(CharSequence cs, int i, int j, int k) {
            }
        });
4

3 回答 3

0

TextWatcher可能是您正在寻找的。根据您的使用情况,它会在用户移动光标时通知您。尝试检查beforeTextChanged()回调中的给定位置,以便在文本更改其值之前对其做出反应。

http://developer.android.com/reference/android/text/TextWatcher.html

例子:

txtEdit.addTextChangedListener (new TextWatcher() {

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

          }

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

          }

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

您将在这些回调中获得光标的新位置,这可能是您想要的。

祝你好运。

于 2013-11-01T14:59:22.850 回答
0

使用TextWatcher检测用户在 EditText 中添加了换行符

检查此答案以获取更多信息。

于 2013-11-01T14:21:36.930 回答
0

TextWatchers 不会告诉您有关 selecrion 更改的信息,请改用 SpanWatcher,将其设置为可编辑文本的跨度,其中 start == 0、end == Editable.length() 和 flags == Spannable.SPAN_INCLUSIVE_INCLUSIVE

于 2013-11-01T15:33:46.950 回答