Désactiver l'autosuggest pour EditText?

123

Existe-t-il un moyen de désactiver par programme cette liste de suggestions automatiques qui apparaît lorsque vous tapez EditText?

nikib3ro
la source

Réponses:

122

J'avais la même question mais je voulais toujours définir cette option dans mon fichier XML, alors j'ai fait un peu plus de recherche jusqu'à ce que je le découvre moi-même.

Ajoutez cette ligne dans votre EditText.

android:inputType="textFilter" 

Voici un conseil. Utilisez cette ligne si vous souhaitez pouvoir utiliser la touche «entrée».

android:inputType="textFilter|textMultiLine"
glr
la source
AVOIR MON UPVOTE! En fait, cela fonctionne très bien lorsque vous voulez faire ressembler un EditText à un textView.
sir_k
1
Ne fonctionne pas non plus dans quelques téléphones Android 4.4
voghDev
API 24 / Android 7.0: J'ai remplacé android:inputType="textPersonName"par le texte suggéré mais il affiche toujours la ligne de suggestion (avec l'icône du micro).
Néph
120
android:inputType="textNoSuggestions"  

aussi tu ferais mieux de lire ceci

Kreker
la source
5
Notez que "textNoSuggestions" ne fonctionne que pour l'API 5 et supérieur.
glr le
89
@gyller avez-vous vu un appareil avec une API inférieure à 5?
kreker
15
0,23% de mes utilisateurs sont sur 1.6 (niveau API 4). :)
Jeremy Logan
1
Bien que vous perdiez ensuite la touche ENTRÉE. Si vous voulez pouvoir utiliser ENTERs android: inputType = "textNoSuggestions | textMultiLine"
barlop
3
Il désactive les suggestions mais affiche toujours la ligne de suggestion (avec une option de micro).
VipulKumar
61
android:inputType="textVisiblePassword" 

fonctionne comme un charme

Mr_Hmp
la source
3
Je n'irais pas dans cette voie. C'est un hack et vous ne mentionnez pas quelles autres fonctionnalités du clavier peuvent changer lorsque vous lui dites qu'il s'agit d'un mot de passe. Utilisez "text | textNoSuggestions".
Michael Peterson
2
@ P1X3L5 textNoSuggestions ne fonctionne pas pour de nombreux appareils. Malheureusement, ce hack est nécessaire jusqu'à ce que Google corrige cela
Tariq
1
pour moi, c'était mieux, cela supprime également la bande au-dessus du clavier (nexus 5), ce qui ne doit pas nécessairement être vrai pour tous les appareils mais donne de meilleures performances pour certains utilisateurs (cela désactive également la capacité de saisie vocale)
Arkadiusz Cieśliński
1
cela a fonctionné pour supprimer le caractère de .point ajouté à la fin du mot si deux espaces sont tapés après ce mot. Je l'ai utilisé pour la barre d'action searchView ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo
C'est la seule solution qui a fonctionné pour moi. Les autres réponses ne fonctionnent pas lors du déplacement dans un formulaire et du retour dans un champ. Google est un tas de dopes. Publier des fonctionnalités aussi simples qui sont incomplètes et mal testées.
angryITguy
41

Façons de le faire:

  1. Par programme
editText.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
  1. XML
android:inputType="textNoSuggestions"

Si vous avez déjà défini des indicateurs, alors:

  1. Par programme
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
la source
22

L'approche la plus fiable que j'ai trouvée pour me débarrasser de la saisie semi-automatique est d'utiliser

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

sur votre contrôle EditText. Comme Charlie l'a signalé dans une réponse différente sur cette page,

android:inputType="textVisiblePassword"

est la version XML de cet indicateur.

Vous pouvez combiner ce drapeau avec

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

J'avais utilisé InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS sans InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, qui fonctionnait pour la plupart des téléphones, mais je suis ensuite tombé sur un téléphone Samsung pour lequel je recevais toujours la saisie semi-automatique.

Android désactiver par programme la saisie semi-automatique / l'autosuggest pour EditText dans l'émulateur

qui a suggéré d'utiliser InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

J'ai essayé ceci (avec InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) et cela a fonctionné. Vous pouvez voir pourquoi même un téléphone qui pourrait ne pas prendre l'allusion au fait que vous ne voulez pas autocomplete serait que pour lui permettre d'être désactivé pour un champ de mot de passe. À court de retenir notre souffle, cela pourrait être le meilleur moyen d'obtenir ce que nous attendons de ces téléphones.

Sur certains de mes appareils, la police a été légèrement modifiée par ce drapeau - surtout pour distinguer plus clairement un zéro (0) d'un Oh (O), ce qui serait évidemment important pour afficher un mot de passe. Mais au moins, cela a fonctionné, et la nouvelle police n'était pas sans intérêt.

Même si le post sur lequel j'ai trouvé cette suggestion était ancien, le téléphone sur lequel j'ai testé était très récent - un Samsung Galaxy Note II (SPH-L900) stock Android 4.1.2 de Sprint. Le clavier sélectionné était «Samsung Keyboard», et apparemment c'était la valeur par défaut pour ce téléphone lorsque le client l'a reçu de Sprint. Donc, ce problème a apparemment persisté au fil des ans pour au moins une partie de la gamme importante de téléphones Samsung.

Pour ceux d'entre vous qui, comme moi, ne disposent pas d'un appareil de test Samsung, cela pourrait être une information importante.

Carl
la source
3
Ne fonctionne pas sur Samsung S3 avec le firmware actuel. Oups.
Afficher le nom
@SargeBorsch: Êtes-vous en train de dire que TYPE_TEXT_VARIATION_VISIBLE_PASSWORD avec TYPE_TEXT_FLAG_NO_SUGGESTIONS effectue toujours un auto-complétion sur votre S3? Oui, utilisez-vous le clavier d'origine? Je n'ai pas de S3 mais j'ai essayé mon application (qui utilise l'approche ci-dessus) sur un S3 dans le passé et il n'y avait pas d'auto-complétion. J'ai un S4 sous Android 4.4 (Cyanogenmod) et il ne se complète pas automatiquement.
Carl
@SargeBorsch: Si vous souhaitez essayer une application qui utilise l'approche ci-dessus sur votre S3, voici la mienne: play.google.com/store/apps/ ... Je serais intéressé de savoir si le champ Vérifier le mot au bas de cela app (qui utilise les indicateurs ci-dessus) essaie de se compléter automatiquement sur votre appareil. TIA.
Carl
Merci, je vais le vérifier bientôt
Nom d'affichage
> "Êtes-vous en train de dire que TYPE_TEXT_VARIATION_VISIBLE_PASSWORD avec TYPE_TEXT_FLAG_NO_SUGGESTIONS effectue toujours un auto-complétion sur votre S3?" Oui, exactement. Bien qu'il y ait aussi un type de courrier électronique, car il s'agit d'une entrée de courrier électronique ...
Nom d'affichage
20

Pour la version Android 8.0 ou supérieure, ce code ne fonctionne pas et pour le texte de saisie semi-automatique, ce code ne fonctionne pas non plus, je vous suggérerai donc d'utiliser le code ci-dessous pour désactiver les suggestions automatiques dans la version 8.0 ou supérieure d'Android, utilisez cette propriété d'edittext android: importantForAutofill = "non"

                   <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" />

et pour le texte de saisie semi-automatique comme celui-ci, utilisez ce champ pour désactiver la suggestion automatique 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
la source
2
Impressionnant! C'était la seule chose qui fonctionnait pour moi.
Laurel Thomson
La seule chose qui fonctionne pour moi, merci @MaheshKeshvala, voté pour avoir sauvé ma journée.
Ravi Vaniya le
Le remplissage automatique n'est pas un remplissage automatique du clavier, ce sont des fonctionnalités différentes. Le remplissage automatique est géré par le système d'exploitation, tandis que la saisie semi-automatique est gérée par le développeur du clavier (espérons-le).
milosmns
11

Vous pouvez résoudre ce problème en utilisant ceci:

android:importantForAutofill="no" 

Android O a la fonctionnalité de prendre en charge le remplissage automatique des champs, utilisez simplement ceci dans votre xml, cela désactivera les conseils de remplissage automatique

empressé
la source
cela n'a fonctionné que pour moi .... Merci
Akash kumar il y a
7

Comme c'est toujours un problème, je vais publier cette réponse. android: inputType = "textVisiblePassword" fonctionne mais ce n'est pas souhaitable, d'abord parce que c'est une fausse déclaration de l'entrée et ensuite parce qu'il désactive la saisie gestuelle!

Au lieu de cela, j'ai dû utiliser LES DEUX drapeaux textNoSuggestions et textFilter. L'un ou l'autre seul ne fonctionnait pas.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

Le textCapSentences était pour d'autres raisons. Mais ce inputType a conservé la saisie par balayage et désactivé la barre d'outils de suggestion.

Tariq
la source
7

J'obtenais cette chose sur les téléphones Samsung fonctionnant sous 4.4.4. Cela a résolu mon problème

android:inputType="text|textVisiblePassword|textNoSuggestions"
Ajji
la source
Idem sur Samsung exécutant 8.1. La seule chose qui a fonctionné pour moi était android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin
4

OK, le problème était - dans Eclipse, vous n'obtenez pas de suggestion pour le drapeau nommé: textNoSuggestion

Et vous ne pouvez pas le définir dans main.xml (où vous concevez l'interface utilisateur) car cet attribut pour inputType n'est pas reconnu. Vous pouvez donc le définir dans le code en utilisant int const:

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

Et merci jasta00 de m'avoir aidé à trouver la réponse pour celui-ci.

nikib3ro
la source
6
Cela fait le travail ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
w.donahue
2
D'accord, utilisez la constante pas la valeur
David Snabel-Caunt
1
@ kape123 Vous ne pouvez pas définir android: inputType = "textNoSuggestions" en XML car votre cible de compilation est inférieure à 5 api
kreker
Notez que pour certains téléphones Samsung, la saisie semi-automatique du clavier standard n'est pas désactivée par InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Une personne suggère d'utiliser InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD dans cet article plutôt ancien: stackoverflow.com/questions/6281514/…
Carl
2
android:inputType="text|textNoSuggestions"
Michael Peterson
la source
1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Cela vous aidera.

Thomas VJ
la source
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
la source
0

Vous pouvez simplement utiliser la setThreshold()méthode EditText . Définissez le seuil sur 100, par exemple, lorsque vous ne souhaitez pas afficher de prédictions. Si vous souhaitez réactiver l'affichage des prédictions, réglez-le sur un petit int comme 1 ou 2 en fonction de vos besoins.

Kaolick
la source
il n'y a pas de setThreshold () pour EditText, pouvez-vous expliquer?
behelit