2013-11-01 76 views
1

我有一個編輯文本,我想知道如果光標已經移動到下一行或者沒有移動到下一行我想調用一個新的功能。我怎樣才能做到這一點? 有沒有一種方法或功能,我可以知道光標已移動到下一行?我們如何知道光標已經移動到edittext的下一行android

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) { 
      } 
     }); 

回答

0

使用TextWatcher來檢測用戶已添加了一個新行到的EditText

檢查this answer更多信息。

+0

我已經使用了一個textwatcher。看到我剛剛添加的代碼,我現在如何檢測行更改? –

+1

你不能,TextWatcher不會通知about.selection更改,請改用SpanWatcher – pskink

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) { 
      } 
    }); 

你會得到這些回調中的光標的新位置,這可能是你想要的。

祝你好運。

0

TextWatchers不告訴你selecrion變化,使用SpanWatcher相反,將其設置爲一個跨度您Editable.length()可編輯的文本與開始== 0,結束==和標誌== Spannable.SPAN_INCLUSIVE_INCLUSIVE

相關問題