2012-06-23 5 views
23

Sto cercando un modo per impedire all'utente di spostare la posizione del cursore ovunque. Il cursore dovrebbe rimanere sempre alla fine del valore EditText corrente. Inoltre, l'utente non dovrebbe essere in grado di selezionare nulla in EditText. Hai idea di come realizzarlo in Android usando un EditText?Come disabilitare il posizionamento del cursore e la selezione del testo in un EditText? (Android)

Per chiarire: l'utente dovrebbe essere in grado di inserire testo, ma solo alla fine.

risposta

35

Ho avuto lo stesso problema. Questo ha finito per lavorare per me:

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

Sì, ho finito con qualcosa di simile. Non sono molto soddisfatto di questa soluzione dato che c'è ancora questa maniglia blu, ma va bene purché non conosca un approccio migliore. Grazie comunque. –

+2

Ottima risposta. Questo funziona perfettamente. – toobsco42

+0

Grazie! Questo è esattamente ciò di cui avevo bisogno. – CodyMace

6

Questo ripristinerà focus del cursore all'ultima posizione del testo

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

Questo metodo consente di disattivare spostare il cursore sul touch

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

ed è possibile utilizzare l'attributo xml

android: cursorVisible

o la funzione java

setCursorVisible (booleano)

per disabilitare il cursore lampeggiante di EditText

+0

Nota che avete ancora preoccupare di tasti freccia/trackball/D-pad cambiando la posizione del cursore - che potrebbe essere gestito da una sorta di "shenanigans" onKeyDown(). E, questo non * disabilita * la selezione, e non so se è possibile. – CommonsWare

+0

Grazie, ma questa non è esattamente la soluzione che stavo cercando. Il problema con la disattivazione di tutti gli eventi tocco nella vista è che non è possibile mettere a fuoco la vista. E mi piacerebbe avere un cursore lampeggiante - solo la possibilità di spostare il cursore dovrebbe essere disabilitata. –

1

Suona come il modo migliore per farlo è quello di rendere il proprio CustomEditText classe sovrascrivere/modificare qualsiasi metodo pertinente. Puoi vedere lo source code per EditText qui.

public class CustomEditText extends EditText { 

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

    /* override other methods, etc. */ 

} 
2

Prova questa:

mEditText.setMovementMethod(null);