Deshabilitar el cursor intermitente EditText

Respuestas:

355

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

Vic
fuente
13
Impresionante, esto junto con onclicklistener que lo hace visible da el comportamiento correcto :)
Warpzit
1
@cerin ¿hay alguna manera de ocultar el marcador azul para que pueda desactivar el pegado, pero mantenga el cursor visible para que el usuario vea dónde está en el campo?
limlim
9
¿Es posible desactivar solo el parpadeo y no el cursor?
Desarrollador de Android
35

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

Objetivo: deshabilitar el cursor parpadeante cuando EditTextno está enfocado, y habilitar el cursor parpadeante cuando EditTextestá enfocado. A continuación también se abre el teclado cuando EditTextse hace clic y lo oculta cuando presiona Listo en el teclado.

1) Establezca en su xml debajo de su EditText:

android:cursorVisible="false"

2) Establecer 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 que se pulsa el uso OnEditorActionListenera tu 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;
            }
        });
coolcool1994
fuente
66
KeyEvent.KEYCODE_ENTER no funcionará para todos los teclados. Deberá mencionar específicamente android: imeOptions = "actionDone" en el diseño y luego manejar EditorInfo.IME_ACTION_DONE también.
PsyGik
Gran respuesta simplemente debe sustituir al hacer clic con el tacto, ya algún tiempo de edición de texto ganancia de foco sin el clic por lo que en este caso no será mostrado el cursor
Antwan
10

Puede usar el siguiente código para habilitar y deshabilitar la edición del cursor de texto mediante programación.

Para habilitar el cursor

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

Para deshabilitar el cursor

    editText.setCursorVisible(false);

El uso de XML permite desactivar cursor

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

Para hacer que edit_text sea Seleccionable para (copiar / cortar / pegar / seleccionar / seleccionar todo)

   editText.setTextIsSelectable(true);

Para centrarse en el modo táctil, escriba las siguientes líneas en XML

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

programáticamente

  editText.requestFocusFromTouch();

Para borrar el enfoque en el modo táctil

  editText.clearFocus()
Sagar
fuente
editText.clearFocus () es lo que estaba buscando. ¡¡Gracias!! +1
iUser
3

El problema con la configuración de la visibilidad del cursor en verdadero y falso puede ser un problema ya que elimina el cursor hasta que lo vuelva a configurar y al mismo tiempo el campo sea editable, lo que no es una buena experiencia para el usuario.

así que en lugar de usar

setCursorVisible(false)

solo hazlo así

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)

El código anterior elimina el foco que a su vez elimina el cursor. Y lo habilita nuevamente para que pueda tocarlo nuevamente y poder editarlo. Al igual que la experiencia de usuario normal.

vikas kumar
fuente
2

En mi caso, quería habilitar / deshabilitar el cursor cuando la edición está enfocada.

En tu 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);
}
MontiRabbit
fuente
Estoy bastante seguro de que quieres edit.setCursorVisible(!isKeyboardOpen);estar edit.setCursorVisible(isKeyboardOpen);para que el cursor sea visible cuando el teclado esté presente.
Daniel Storm
2

simplemente agregue esta línea en su diseño principal

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true">

    <EditText
        android:inputType="text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
Excepción de puntero nulo
fuente
1

Si quieres ignorarlo Edittextdesde el inicio de la actividad, android:focusabley android:focusableInTouchModete ayudará inshallah.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout7" android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true" android:focusableInTouchMode="true">

Esto LinearLayoutcon tu Edittext.

Sajid Khan
fuente
0
  1. Cambie el foco a otra vista (por ejemplo, cualquier vista de texto o Linearlayout en el XML) usando

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. configura addTextChangedListener para editar el texto en Activity.

  3. y luego en el texto posterior cambiado de Edittext put edittext.clearFocus();

Esto habilitará el cursor cuando el teclado esté abierto y deshabilitará cuando el teclado esté cerrado.

Bhavani PK
fuente
0

En kotlin your_edittext.isCursorVisible = false

Rohit Rohit
fuente
Por favor, formatee el marcado. Puede hacerlo sangrando el código por 4 espacios.
Danon
-1

rootLayout.findFocus (). clearFocus ();

Pratik Lahoti
fuente