Отключение службы автозаполнения Android O для приложения

Android O имеет функцию для поддержки автозаполнение для полей. Есть ли способ отключить его для конкретного приложения. То есть я хочу заставить свое приложение не использовать сервис автозаполнения.

это возможно ?

чтобы заблокировать автозаполнение для всего действия, используйте это в onCreate () действия:

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

есть ли лучший способ, чем этот ?

8 ответов


это возможно ?

Не то, что я знаю. Конечно, ничего не задокументировано.

есть ли лучший способ, чем этот ?

Не то, что я знаю.


В настоящее время нет прямого способа отключить автозаполнение для всего приложения, так как функция автозаполнения посмотреть конкретные.

вы все еще можете попробовать этот способ и называют BaseActivity везде.

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);
    }
}

вы также можете принудительно запросить автозаполнение таким образом.

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

Примечание: На данный момент функция автозаполнения доступна только в API 26 Android Oreo 8.0

надеюсь, что это помогает!


Я считаю, что принятый ответ неверен:

Итак, у меня есть свой собственный класс, который выходит на android.поддержка.В7.штучка.AppCompatEditText и все что я сделал, это переписал следующий метод со следующим значением:

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

никакие другие решения не работали, даже android:importantForAutofill= "no".

getAutofillType() происходит из класса View, поэтому он должен работать для каждого другого класса, такого как TextInputEditText тоже!


Я тоже столкнулся с этим. Оказывается, проблема была вызвана установкой текста подсказки на EditText, вложенном внутри TextInputLayout.

Я немного покопался и нашел этот самородок в примечаниях к выпуску 26.0.0 Beta 2. Andorid Поддержка Примечания К Выпуску Июнь 2017

TextInputLayout должен установить подсказки на onProvideAutofillStructure ()

это привело меня к попытке установить подсказку на TextInputLayout вместо вложенного Полей EditText.

это решило проблему сбоя для меня. Пример:

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

кажется, что это ошибка, что нужно исправить : https://issuetracker.google.com/issues/67675432
в то же время обходным путем сейчас является отключение функции автозаполнения для всего проекта. Вы можете добавить в values-v26/styles.xml файл следующий стиль или вы можете редактировать свой BaseEditTextStyle, если вы используете определенный стиль для ваших представлений EditText.

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

и values-v26/themes.xml файл вы можете просто добавить в тему по умолчанию, которую вы используете в своем приложении предметы editTextStyle и android:editTextStyle следующее :

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

таким образом, вы можете применить эти изменения для все ваши EditTexts без необходимости изменять файлы макета или действия (и позже вы можете легко удалить его, когда ошибка исправлена).


создать пользовательский стиль EditText и установить android:importantForAutofill to no.

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

затем в вашей теме активности установите этот стиль для editTextStyle.

<item name="android:editTextStyle">@style/EditTextStyleWithoutAutoFill</item>

со ссылкой на Google проблема tracker, это было исправлено.

это исправлено на Android 8.1

Если какая-либо проблема сохраняется, пожалуйста, сообщите в Google проблема tracker они снова откроются для изучения.


в атрибутах EditText добавьте android:importantForAutofill="no" Это должно быть временное исправление и будет применяться только к api 26+