Deshabilitar el cursor intermitente EditText


Respuestas:


355

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


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

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()

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.


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

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>

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.


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.


0

En kotlin your_edittext.isCursorVisible = false


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.