Подтвердить что ты не робот

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

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

Возможно ли это?

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

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

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

4b9b3361

Ответ 1

Возможно ли это?

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

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

Не то, чтобы я знал.

Ответ 2

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

Вы все равно можете попробовать этот способ и вызвать 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

Надеюсь, это поможет!

Ответ 3

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

Итак, у меня есть собственный класс, который расширяет файл android.support.v7.widget.AppCompatEditText, и все, что я сделал, перезаписывает следующий метод со следующим значением:

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

никаких других решений не было, даже андроид: importantForAutofill = "no".

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

Ответ 4

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

Я немного поработал и нашел этот самородок в примечаниях к выпуску 26.0.0 Beta 2. Заметки о выпуске поддержки Andorid June 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>

Ответ 5

Создайте собственный стиль EditText и установите android:importantForAutofill на no.

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

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

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

Ответ 6

Что касается отслеживания проблем Google, он исправлен.

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

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

Ответ 7

Кажется, это ошибка, которая должна быть исправлена: 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>

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

Ответ 8

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