46 votes

Désactivation du service de remplissage automatique Android O pour une application

Android O a la fonctionnalité de prendre en charge le remplissage automatique des champs. Existe-t-il un moyen de le désactiver pour une application spécifique. C'est-à-dire que je veux forcer ma demande à ne pas utiliser le service de remplissage automatique.

C'est possible ?

Pour bloquer le remplissage automatique pour une activité entière, utilisez ceci dans onCreate () de l'activité:

 getWindow()
  .getDecorView()
  .setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
 

Existe-t-il une meilleure méthode que celle-ci?

30voto

albeee Points 956

Il n'existe actuellement aucun moyen direct de désactiver le remplissage automatique pour une application entière, car la fonction de remplissage automatique est spécifique à View.

Vous pouvez toujours essayer de cette façon et appeler BaseActivity partout .

 public class BaseActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       disableAutofill();
    }

    @TargetApi(Build.VERSION_CODES.O)
    private void disableAutofill() { 
        getWindow().getDecorView().setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
    }
}
 

Vous pouvez également forcer le remplissage automatique de la demande de cette façon.

 public void forceAutofill() {
    AutofillManager afm = context.getSystemService(AutofillManager.class);
    if (afm != null) {
        afm.requestAutofill();
    }
}
 

Remarque: Pour le moment, la fonction de remplissage automatique n'est disponible que dans l' API 26 Android Oreo 8.0

J'espère que cela t'aides!

25voto

Karoly Points 374

Je pense que la réponse acceptée est incorrecte:

J'ai donc ma propre classe qui étend le android.support.v7.widget.AppCompatEditText et tout ce que j'ai fait est écrasé la méthode suivante avec la valeur suivante:

 @Override
public int getAutofillType() {
    return AUTOFILL_TYPE_NONE;
}
 

aucune autre solution n'a fonctionné, pas même android: importantForAutofill = "no".

getAutofillType () provient de la classe View, donc cela devrait aussi fonctionner pour toutes les autres classes telles que TextInputEditText!

12voto

Azethoth Points 2016

Je suis tombé sur cette trop. Il s'avère que le problème a été causé par le réglage de l'indicateur de texte sur l'EditText imbriquée à l'intérieur de la TextInputLayout.

J'ai fait quelques recherches et trouvé cette pépite dans la 26.0.0 Bêta 2 notes de version. Andorid Le Soutien Notes De Version Juin 2017

TextInputLayout devez définir conseils sur onProvideAutofillStructure()

Ce qui m'a conduit à essayer de régler le soupçon sur la TextInputLayout au lieu de la imbriquée EditText.

Cette résolu le problème de plantage pour moi. Exemple:

            <android.support.design.widget.TextInputLayout
                android:id="@+id/textInputLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Some Hint Text"
                android.support.design:hintAnimationEnabled="true"
                android.support.design:hintEnabled="true"
                android.support.design:layout_marginTop="16dp">

                <android.support.design.widget.TextInputEditText
                    android:id="@+id/editText"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

            </android.support.design.widget.TextInputLayout>

4voto

Aymen Points 41

Semble être un bug qui doit être corrigé : https://issuetracker.google.com/issues/67675432
En attendant une solution de contournement pour le moment est de désactiver la fonctionnalité de saisie automatique pour l'ensemble du projet. Vous pouvez ajouter dans l' values-v26/styles.xml le fichier suivant le style ou vous pouvez éditer vos BaseEditTextStyle si vous utilisez un style spécifique pour votre EditText points de vue.

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
<item name="android:importantForAutofill">noExcludeDescendants</item>
</style>

et dans l' values-v26/themes.xml le fichier, vous pouvez simplement ajouter le thème par défaut que vous utilisez dans votre application les éléments editTextStyle et android:editTextStyle comme suit :

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:editTextStyle">@style/App_EditTextStyle</item>
<item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

de cette façon, vous pouvez appliquer ces modifications pour tous vos EditTexts sans avoir à modifier les fichiers de mise en page ou d'Activités (et plus tard, vous pouvez facilement l'enlever quand le bug est corrigé).

3voto

CommonsWare Points 402670

C'est possible ?

Pas que je sache. Certes, rien n'est documenté.

Existe-t-il une meilleure méthode que celle-ci?

Pas que je sache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X