¿Deshabilita el teclado suave desde EditText pero todavía permite copiar / pegar?

Hola, estoy creando un marcador personalizado, así que creo mi propio teclado de entrada.

El problema es ¿cómo desactivo el EditText pero sigo permitiendo cortar / copiar / pegar? El marcador de acciones puede hacer esto.

He intentado con android:focusable="false" pero desactiva el corte / copia (aún así puedo pegar).

También traté de desactivar el inputType programáticamente que deshabilita los tres comandos:

 myEditText.setInputType(InputType.TYPE_NULL); //Can't cut/copy/paste 

Deshabilitarlo de manifiesto tampoco funciona:

 android:configChanges="orientation|keyboardHidden" //Keyboard still popped up 

¿Alguna solución? Gracias

Después de horas y horas de investigación, finalmente encontré una solución que funciona para todas las versiones de API. Espero que esto le ahorre tiempo a alguien.

Si está desarrollando para API> = 11, la solución es simple, ya sea:

1) Agregue las dos propiedades siguientes en el archivo xml de EditText

 android:inputType="none" android:textIsSelectable="true" 

o

2) Progtwigtivamente haga lo siguiente

 myEditText.setInputType(InputType.TYPE_NULL); myEditText.setTextIsSelectable(true); 

Y tu estas listo.

Si también desea atender API <11, descubrí que no hay forma de deshabilitar al teclado para que no aparezca si desea seleccionar el texto para copiar y pegar. La configuración enfocable a falso deshabilitará el teclado, pero no ayuda porque también desactiva su capacidad para seleccionar texto. Cualquier otra solución que encuentre en stackoverflow tampoco funcionará o desactivará la selección de texto al mismo tiempo.

Una manera fea de resolver esto es como tal …

Primero, agregue esta propiedad en el archivo xml de EditText

 android:editable="false" 

Sí, esto está en desuso, pero es necesario para que EditText no se pueda editar en la versión de API <11.

A continuación, tendremos que ocultar el teclado tan pronto como aparezca, para que podamos seguir seleccionando texto sin que el teclado bloquee el camino.

Use este código a continuación para detectar la aparición del teclado (solución obtenida de https://stackoverflow.com/a/9108219/1241783 ), y escóndalo inmediatamente.

 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { final View activityRootView = findViewById(R.id.activityRoot); activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); //r will be populated with the coordinates of your view that area still visible. activityRootView.getWindowVisibleDisplayFrame(r); int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... //Hide the keyboard instantly! if (getCurrentFocus() != null) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } } } }); } 

Funciona para mi caso. Aunque puedes ver el teclado aparecer en una fracción de segundo (que es la parte más fea), pero no se me ocurre otra forma de hacerlo funcionar al momento de escribir. Si tienes una mejor solución, ¡por favor deja un comentario!

Avíseme también si esto le ahorra tiempo a alguien 🙂

Para desactivar el teclado suave que se muestra, manteniendo la funcionalidad copiar / pegar y cursor, solo agregue esta línea en su actividad:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 

Como la respuesta superior actual usa un método en desuso y no tenía el método de pegar, esta es otra manera que no usa métodos antiguos. Pero, trata de usar un método oculto a través de la reflexión con un respaldo. =)

He subclasificado EditText en un nuevo widget llamado KeyboardlessEditText que aún conserva todas las funciones de edición geniales sin que se muestre el teclado. Solo deja caer el archivo y listo.

El código completo es un poco largo para esta publicación, pero mientras GitHub no se cuelgue, esto funcionará: https://github.com/danialgoodwin/android-widget-keyboardless-edittext/blob/master/KeyboardlessEditText2 .Java

prueba esto

  EditText et = ... // your EditText et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView. 

No hay necesidad de subclase. La principal diferencia entre esto y hacer que su EditText no sea enfocable, es que EditText todavía tiene su propio cursor: puede seleccionar texto, etc. Todo lo que hace es suprimir el IME para que no aparezca su propio teclado virtual.

Para deshabilitar la EditText emergente automática del teclado del sistema para EditText o TextView haga lo siguiente:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { editTextView.setShowSoftInputOnFocus(false); } else { editTextView.setTextIsSelectable(true); //NB Accepting the case when non editable text will be selectable }