2012-06-23 25 views
23

Szukam sposobu, aby uniemożliwić użytkownikowi przesunięcie pozycji kursora w dowolnym miejscu. Kursor powinien zawsze pozostać na końcu bieżącej wartości EditText. Oprócz tego użytkownik nie powinien mieć możliwości wyboru niczego w EditText. Czy masz pojęcie, jak zrealizować to w Androidzie za pomocą EditText?Jak wyłączyć pozycjonowanie kursora i zaznaczanie tekstu w EditText? (Android)

Wyjaśnienie: użytkownik powinien mieć możliwość wstawiania tekstu, ale tylko na końcu.

Odpowiedz

35

Miałem ten sam problem. To okazało się pracować dla mnie:

public class CustomEditText extends EditText { 

    @Override 
    public void onSelectionChanged(int start, int end) { 

     CharSequence text = getText(); 
     if (text != null) { 
      if (start != text.length() || end != text.length()) { 
       setSelection(text.length(), text.length()); 
       return; 
      } 
     } 

     super.onSelectionChanged(start, end); 
    } 

} 
+1

Tak, skończyłem z nieco podobnym. Nie jestem zbyt zadowolony z tego rozwiązania, ponieważ wciąż jest ten niebieski uchwyt, ale jest OK, o ile nie znam lepszego podejścia. Dzięki i tak. –

+2

Świetna odpowiedź. To działa idealnie. – toobsco42

+0

Dzięki! Dokładnie tego potrzebowałem. – CodyMace

6

To będzie zresetować kursora skupić się na ostatniej pozycji tekstu

editText.setSelection(editText.getText().length()); 

Ta metoda wyłączenia kursora ruch na dotyk

public class MyEditText extends EditText{ 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     final int eventX = event.getX(); 
     final int eventY = event.getY(); 
     if((eventX,eventY) is in the middle of your editText) 
     { 
       return false; 
     } 
     return true; 
    } 
} 

i można użyć albo atrybut xml

android: cursorVisible

lub funkcja java

setCursorVisible (logiczna)

wyłączyć migający kursor z EditText

+0

pamiętać, że nadal trzeba się martwić o klawisze strzałek/trackball/D-pad zmiany położenia kursora - które mogą być obsługiwane przez coś w rodzaju 'onKeyDown()' shenanigans. I to nie * wyłącza * wybór i nie wiem, czy to możliwe. – CommonsWare

+0

Dziękuję, ale nie jest to dokładnie rozwiązanie, którego szukałem. Problem z wyłączaniem wszystkich zdarzeń dotykowych w widoku polega na tym, że nie można w ogóle ustawić widoku. I chciałbym mieć migający kursor - tylko możliwość przesunięcia kursora powinna być wyłączona. –

1

Brzmi jak najlepszy sposób, aby to zrobić jest zrobić własny CustomEditText klasę i nadpisać/zmodyfikować wszelkie odpowiednie metody. Możesz zobaczyć tutaj source code dla .

public class CustomEditText extends EditText { 

    @Override 
    public void selectAll() { 
     // Do nothing 
    } 

    /* override other methods, etc. */ 

} 
2

Spróbuj:

mEditText.setMovementMethod(null);