¿Desactivar autosuggest para EditText?

123

¿Hay alguna manera de desactivar mediante programación esa lista de sugerencias automáticas que aparece a medida que escribe en EditText?

nikib3ro
fuente

Respuestas:

122

Tenía la misma pregunta, pero aún quería establecer esta opción en mi archivo XML, así que investigué un poco más hasta que lo descubrí.

Agregue esta línea a su EditText.

android:inputType="textFilter" 

Aquí va un consejo. Use esta línea si desea poder usar la tecla "enter".

android:inputType="textFilter|textMultiLine"
glr
fuente
¡TENGA MI VOTO! En realidad, esto funciona muy bien cuando desea que un EditText se vea como un textView.
sir_k
1
Tampoco funciona en un par de teléfonos con Android 4.4
voghDev
API 24 / Android 7.0: lo reemplacé android:inputType="textPersonName"con el texto sugerido pero aún muestra la fila de sugerencias (con el ícono del micrófono).
Neph
120
android:inputType="textNoSuggestions"  

También será mejor que leas esto

kreker
fuente
55
Tenga en cuenta que "textNoSuggestions" solo funciona para API 5 y superior.
glr
89
@gyller ¿has visto algún dispositivo con API inferior a 5?
kreker
15
0.23% de mis usuarios están en 1.6 (API Nivel 4). :)
Jeremy Logan
1
Aunque luego pierde la tecla ENTER. Si desea poder usar ENTERs android: inputType = "textNoSuggestions | textMultiLine"
barlop
3
Deshabilita las sugerencias pero aún muestra la fila de sugerencias (tiene una opción de micrófono).
VipulKumar
61
android:inputType="textVisiblePassword" 

Funciona de maravilla

Mr_Hmp
fuente
3
Yo no iría por esta ruta. Es un truco y no mencionas qué otras características del teclado pueden cambiar cuando le dices que es por contraseña. Utilice "text | textNoSuggestions".
Michael Peterson
2
@ P1X3L5 textNoSuggestions no funciona para muchos dispositivos. Desafortunadamente, este truco es necesario hasta que Google solucione eso
Tariq
1
para mí fue mejor, también elimina la tira sobre el teclado (nexus 5) que no tiene por qué ser cierto para todos los dispositivos, pero ofrece un mejor rendimiento para algunos usuarios (también desactiva la capacidad de entrada de voz)
Arkadiusz Cieśliński
1
esto funcionó para eliminar el .punto char agregado al final de la palabra si se escriben dos espacios después de esa palabra. Lo utilicé para la barra de acción searchView ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo
Esta es la única solución que funcionó para mí. Otras respuestas no funcionan al pasar por un formulario y volver a un campo. Google es un montón de tontos. Lanzando funciones tan simples que están incompletas y mal probadas.
angryITguy
41

Formas de hacerlo:

  1. Programáticamente
editText.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
  1. XML
android:inputType="textNoSuggestions"

Si ya tiene algunas banderas establecidas, entonces:

  1. Programáticamente
inputType = if (disableSuggestions) {
  InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or inputType
} else {
  inputType and InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS.inv()
}
  1. XML
android:inputType="textNoSuggestions|textPassword"
Enzokie
fuente
22

El enfoque más confiable que he encontrado para deshacerme del autocompletado es usar

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

en su control EditText. Como Charlie ha informado en una respuesta diferente en esta página,

android:inputType="textVisiblePassword"

es la versión XML de esta bandera.

Puedes combinar esta bandera con

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

Había estado usando InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS sin InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, que funcionaba para la mayoría de los teléfonos, pero luego encontré un teléfono Samsung para el que todavía me estaba completando automáticamente.

Android deshabilita programáticamente autocompletar / autosuggest para EditText en el emulador

que sugirió usar InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

Intenté esto (junto con InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) y funcionó. Se puede ver por qué incluso un teléfono que no podría tomar la pista que no desee autocompletar sería tener a permitir que sea desactivada para un campo de contraseña. Sin contener la respiración, esta podría ser la mejor manera de obtener lo que queremos de estos teléfonos.

En algunos de mis dispositivos, la fuente cambió ligeramente por esta bandera, más notablemente para distinguir un cero (0) de un Oh (O) más claramente, lo que obviamente sería importante para mostrar una contraseña. Pero al menos funcionó, y la nueva fuente no era poco atractiva.

Aunque la publicación en la que encontré esta sugerencia era antigua, el teléfono que probé era muy reciente: un Samsung Galaxy Note II (SPH-L900) con Android 4.1.2 de Sprint. El teclado seleccionado fue "Samsung Keyboard", y aparentemente este era el predeterminado para este teléfono cuando el cliente lo recibió de Sprint. Por lo tanto, este problema aparentemente ha persistido a lo largo de los años durante al menos parte de la importante línea de teléfonos Samsung.

Para aquellos de ustedes que, como yo, no tienen un dispositivo de prueba Samsung, esta podría ser información importante.

Carl
fuente
3
No funciona en Samsung S3 con el firmware actual. Ups
Nombre para mostrar el
@SargeBorsch: ¿Estás diciendo que TYPE_TEXT_VARIATION_VISIBLE_PASSWORD junto con TYPE_TEXT_FLAG_NO_SUGGESTIONS todavía realiza un autocompletado en tu S3? Entonces, ¿estás usando el teclado estándar? No tengo un S3, pero he probado mi aplicación (que utiliza el enfoque anterior) en un S3 en el pasado y no hubo autocompletar. Tengo un S4 con Android 4.4 (Cyanogenmod) y tampoco se completa automáticamente.
Carl
@SargeBorsch: Si desea probar una aplicación que utiliza el enfoque anterior en su S3, aquí está la mía: play.google.com/store/apps/… Estaría interesado en saber si el campo Verificar palabra en la parte inferior de ese La aplicación (que usa los indicadores anteriores) intenta autocompletarse en su dispositivo. TIA
Carl
Gracias, lo verificaremos pronto
nombre para mostrar el
> "¿Estás diciendo que TYPE_TEXT_VARIATION_VISIBLE_PASSWORD junto con TYPE_TEXT_FLAG_NO_SUGGESTIONS todavía realiza un autocompletado en tu S3?" Sí exactamente. Aunque también hay un tipo de correo electrónico, porque es una entrada de correo electrónico ...
Nombre para mostrar
20

Para la versión de Android 8.0 o superior, este código no funciona y para la vista de texto de autocompletar también este código no funciona, por lo que le sugeriré que use el código siguiente para Desactivar las sugerencias automáticas en 8.0 o superior vesrion de Android use esta propiedad de edittext android: importantForAutofill = "no"

                   <EditText
                            android:id="@+id/name"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:enabled="false"
                            android:focusable="false"
                            android:imeOptions="actionDone"
                            android:maxLength="80"
                            android:maxLines="1"
                            android:textColor="@color/colorBlack"
                            android:textColorHint="@color/colorBlack"
                            android:importantForAutofill="no"
                            android:textSize="@dimen/_12sdp"
                            app:bFontsEdt="light" />

y para la vista de texto de Autocompletar como esta, use este campo para deshabilitar la sugerencia automática android: importantForAutofill = "no" :

      <AutoCompleteTextView
                        android:id="@+id/autocompleteEditTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="@dimen/_3sdp"
                        android:layout_marginTop="@dimen/_5sdp"
                        android:background="@null"
                        android:imeOptions="actionDone"
                        android:singleLine="true"
                        android:text=""
                        android:textColor="@color/colorBlack"
                        android:textColorHint="@color/colorGrayDark"
                        android:importantForAutofill="no"
                        android:textSize="@dimen/_12sdp" />
Mahesh Keshvala
fuente
2
¡Increíble! Esto fue lo único que funcionó para mí.
Laurel Thomson
Lo único que funciona para mí, gracias @MaheshKeshvala, votó por salvarme el día.
Ravi Vaniya
El autocompletado no es un autocompletado de teclado, son características diferentes. El sistema operativo maneja el autocompletado, mientras que el desarrollador del teclado maneja el autocompletado (con suerte).
milosmns
10

Puede resolver este problema usando esto:

android:importantForAutofill="no" 

Android O tiene la función de admitir Autocompletado para campos, solo use esto en su xml, deshabilitará las sugerencias de autocompletar

príncipe
fuente
7

Como esto sigue siendo un problema, voy a publicar esta respuesta. android: inputType = "textVisiblePassword" funciona pero no es deseable, primero porque es una tergiversación de la entrada y segundo porque deshabilita la escritura gestual.

En cambio, tuve que usar AMBAS banderas textNoSuggestions y textFilter. Cualquiera de los dos no funcionó.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

El textCapSentences fue por otras razones. Pero este inputType mantuvo la escritura deslizante y deshabilitó la barra de herramientas de sugerencias.

Tariq
fuente
7

Estaba obteniendo esto en teléfonos Samsung con 4.4.4. Esto resolvió mi problema

android:inputType="text|textVisiblePassword|textNoSuggestions"
Ajji
fuente
Lo mismo en Samsung con 8.1. Lo único que funcionó para mí fue android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin
4

OK, el problema era: en Eclipse no recibes ninguna sugerencia para el indicador llamado: textNoSuggestion

Y no puede configurarlo en main.xml (donde diseña la interfaz de usuario) porque ese atributo para inputType no se reconoce. Entonces puede configurarlo en código usando int const:

EditText txtTypeIt = (EditText) this.findViewById(R.id.txtTypeIt);
txtTypeIt.setInputType(524288);

Y gracias jasta00 por ayudarme a encontrar la respuesta para esta.

nikib3ro
fuente
66
Esto hace el trabajo ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
w.donahue
2
De acuerdo, use la constante, no el valor
David Snabel-Caunt
1
@ kape123 No puede configurar android: inputType = "textNoSuggestions" en xml porque su objetivo de compilación es inferior a 5 api
kreker
Tenga en cuenta que para algunos teléfonos Samsung, InputType no desactiva el autocompletado de teclado estándar.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Una persona sugiere usar InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD en esta publicación bastante antigua: stackoverflow.com/questions/6281514/…
Carl
2
android:inputType="text|textNoSuggestions"
Michael Peterson
fuente
1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Esto te ayudara.

Thomas VJ
fuente
1
    // 100% correct & tested
    txtKey = (EditText) view.findViewById(R.id.txtKey);
    txtKey.setPrivateImeOptions("nm");
    txtKey.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        txtKey.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
    }
Maxime Mbabele
fuente
0

Simplemente puede usar el setThreshold()método EditText . Establezca el umbral en digamos 100 cuando no quiera mostrar predicciones. Si desea volver a activar las predicciones de visualización, vuelva a configurarlo en un int pequeño como 1 o 2, según sus necesidades.

kaolick
fuente
no hay setThreshold () para EditText, ¿puede explicarlo?
Behelit