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?
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.
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!
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!
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>
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é).
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>
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.