web-dev-qa-db-fra.com

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

Android O a pour fonction de prendre en charge Remplissage automatique pour les champs. Est-il possible de le désactiver pour une application spécifique? C’est-à-dire que je veux forcer mon application à ne pas utiliser le service de remplissage automatique.

C'est possible ?

Pour bloquer la saisie automatique de toute une activité, utilisez ceci dans onCreate () de l'activité:

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

Y at-il une meilleure méthode que celle-ci?

26
jgm

C'est possible ?

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

Y at-il une meilleure méthode que celle-ci?

Pas que je sache.

4
CommonsWare

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 View specifique.  

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 la requête à remplir automatiquement de cette façon.

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

Remarque: pour le moment, la fonctionnalité de remplissage automatique est uniquement disponible dans API 26 Android Oreo 8.0

J'espère que cela t'aides!

20
albeee

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

Donc, j'ai ma propre classe qui est é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 ne fonctionnait, pas même Android: importantForAutofill = "no".

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

13
Karoly

Je suis tombé dessus aussi. Il s'avère que le problème a été causé par la définition du texte d'indication sur le texte d'édition imbriqué dans TextInputLayout.

J'ai creusé et trouvé cette pépite dans les notes de publication de la version 26.0.0 Bêta 2 . Notes de version de l'assistance Andorid, juin 2017

TextInputLayout doit définir des astuces sur onProvideAutofillStructure ()

Cela m'a conduit à essayer de définir l'indicateur sur TextInputLayout au lieu de EditText imbriqué. 

Cela a 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>
10
Azethoth

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

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

et dans le fichier values-v26/themes.xml, vous pouvez simplement ajouter au 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 à all vos EditTexts sans avoir à modifier vos fichiers de présentation ou vos Activités (et plus tard, vous pourrez facilement les supprimer lorsque le bogue sera corrigé).

4
Aymen

Créez un style EditText personnalisé et définissez Android:importantForAutofill sur no.

<style name="EditTextStyleWithoutAutoFill" parent="Widget.AppCompat.EditText">
    <item name="Android:importantForAutofill">no</item>
</style>

Ensuite, dans votre thème d'activité, définissez ce style pour editTextStyle.

<item name="Android:editTextStyle">@style/EditTextStyleWithoutAutoFill</item>
2
Nemanja

En référence à suivi des problèmes de Google , il a été corrigé.

Ceci est corrigé sur Android 8.1

Si un problème persiste, signalez-le à l'adresse { suivi des problèmes de Google }. Ils seront rouverts pour examen.

0
Prags