2011-04-07 15 views

Respuesta

273

Puede usar el atributo xml android:cursorVisible="false" o la función java setCursorVisible(false).

+7

impresionante, esto junto con OnClickListener que lo hace visible da el comportamiento correcto :) – Warpzit

+0

androide: cursorVisible = "false " (trabajó para mi. gracias) –

+0

@cerin ¿hay alguna manera de ocultar el marcador azul para poder desactivar el pegado, pero mantener el cursor visible para que el usuario vea dónde está en el campo? – limlim

23

solución perfecta que va más allá de la meta

Objetivo: Desactivar el cursor parpadeante cuando EditText no está en foco, y permitir que el cursor parpadeante cuando EditText está en foco. A continuación, también se abre el teclado cuando se hace clic en EditText, y lo oculta cuando presiona "hecho" en el teclado.

1) Establecer en su xml bajo su EditText:

android:cursorVisible="false" 

2) Conjunto OnClickListener:

iEditText.setOnClickListener(editTextClickListener); 

OnClickListener editTextClickListener = new OnClickListener() 

{ 

    public void onClick(View v) 
    { 
     if (v.getId() == iEditText.getId()) 
     { 
      iEditText.setCursorVisible(true); 
     } 

    } 
}; 

3) a continuación onCreate, capturar el evento cuando se hace se presiona mediante OnEditorActionListener a su EditText y luego setCursorVisible(false).

//onCreate... 

iEditText.setOnEditorActionListener(new OnEditorActionListener() { 

      @Override 
      public boolean onEditorAction(TextView v, int actionId, 
        KeyEvent event) { 
        iEditText.setCursorVisible(false); 
       if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
       } 
       return false; 
      } 
     }); 
+5

KeyEvent.KEYCODE_ENTER no funcionará para todos los teclados. Tendrá que mencionar específicamente android: imeOptions = "actionDone" en el diseño y luego manejar EditorInfo.IME_ACTION_DONE también. – PsyGik

+0

La mejor respuesta debería reemplazarse al hacer clic con el botón táctil porque algunas veces edita el foco de ganancia de texto sin hacer clic, por lo que en este caso el cursor no se mostrará – Tony

1

En mi caso, quería activar/desactivar el cursor cuando se enfoca la edición.

En su actividad:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     View v = getCurrentFocus(); 
     if (v instanceof EditText) { 
      EditText edit = ((EditText) v); 
      Rect outR = new Rect(); 
      edit.getGlobalVisibleRect(outR); 
      Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY()); 
      System.out.print("Is Keyboard? " + isKeyboardOpen); 
      if (isKeyboardOpen) { 
       System.out.print("Entro al IF"); 
       edit.clearFocus(); 
       InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(edit.getWindowToken(), 0); 
      } 

      edit.setCursorVisible(!isKeyboardOpen); 

     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 
+0

Bastante seguro quiere que 'edit.setCursorVisible (! IsKeyboardOpen);' sea 'edit. setCursorVisible (isKeyboardOpen); 'para que el cursor esté visible cuando el teclado está presente. –

2

Puede utilizar siguiente código para activar y desactivar cursor de edición de texto mediante programación.

Para habilitar cursor

editText.requestFocus(); 
    editText.setCursorVisible(true); 

Para desactivar el cursor

editText.setCursorVisible(false); 

uso de XML permite desactivar el cursor

android:cursorVisible="false/true" 
    android:focusable="false/true" 

Para hacer edit_text seleccionable a (copiar/cortar/pegar/select/seleccionar todo)

editText.setTextIsSelectable(true); 

Para centrarse en el modo táctil de escritura siguientes líneas en XML

android:focusableInTouchMode="true" 
    android:clickable="true" 
    android:focusable="true" 

programación

editText.requestFocusFromTouch(); 

Para borrar enfoque en el modo táctil

editText.clearFocus() 
Cuestiones relacionadas