2012-06-23 18 views
23

Estoy buscando una manera de evitar que el usuario mueva la posición del cursor en cualquier lugar. El cursor siempre debe permanecer al final del valor de EditText actual. Además de eso, el usuario no debería poder seleccionar nada en EditText. ¿Tienes alguna idea de cómo realizar eso en Android usando un EditText?¿Cómo deshabilitar el posicionamiento del cursor y la selección de texto en EditText? (Android)

Para aclarar: el usuario debería poder insertar texto, pero solo al final.

Respuesta

35

Tuve el mismo problema. Esto terminó trabajando para mí:

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í, terminé con algo similar. No estoy muy satisfecho con esta solución, ya que todavía existe este asa azul, pero está bien siempre que no conozca un mejor enfoque. Gracias de cualquier manera. –

+2

Gran respuesta. Esto funciona perfectamente – toobsco42

+0

Gracias! Esto es exactamente lo que necesitaba. – CodyMace

6

Esto restablecerá foco del cursor a la última posición del texto

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

Este método desactivará movimiento del cursor en contacto

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

y se puede utilizar el atributo xml

android: cursorVisible

o la función de Java

setCursorVisible (booleano)

para desactivar el parpadeo del cursor de EditarTexto

+0

en cuenta que todavía tiene que preocuparse de las teclas de flecha/trackball/D-pad cambiar la posición del cursor - que podrían ser manejado por algún tipo de 'onKeyDown() 'travesuras. Y esto no * deshabilita * la selección, y no sé si eso es posible. – CommonsWare

+0

Gracias, pero esta no es exactamente la solución que estaba buscando. El problema con la desactivación de todos los eventos táctiles en la vista es que no puede enfocar la vista en absoluto. Y me gustaría tener un cursor parpadeante; solo se debe deshabilitar la posibilidad de mover el cursor. –

1

Suena como la mejor manera de hacer esto es hacer que su propia clase CustomEditText y anular/modificar cualquier método relevante. Puede ver el source code para EditText aquí.

public class CustomEditText extends EditText { 

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

    /* override other methods, etc. */ 

} 
2

Prueba esto:

mEditText.setMovementMethod(null); 
Cuestiones relacionadas