Ответ 1
Возможно ли это?
Не то, что я знаю. Конечно, ничего не документировано.
Есть ли лучший способ, чем этот?
Не то, чтобы я знал.
Android O имеет функцию поддержки Автозаполнение для полей. Есть ли способ отключить его для конкретного приложения. То есть я хочу заставить мое приложение не использовать службу автозаполнения.
Возможно ли это?
Чтобы заблокировать автозаполнение для всей активности, используйте это в onCreate() для действия:
getWindow()
.getDecorView()
.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
Есть ли лучший способ, чем этот?
Возможно ли это?
Не то, что я знаю. Конечно, ничего не документировано.
Есть ли лучший способ, чем этот?
Не то, чтобы я знал.
В настоящее время нет прямого способа отключить автозаполнение для всего приложения, так как функция автозаполнения Показать конкретные.
Вы все равно можете попробовать этот способ и вызвать 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.support.v7.widget.AppCompatEditText, и все, что я сделал, перезаписывает следующий метод со следующим значением:
@Override
public int getAutofillType() {
return AUTOFILL_TYPE_NONE;
}
никаких других решений не было, даже андроид: importantForAutofill = "no".
getAutofillType() поступает из класса View, поэтому он должен работать и для любого другого класса, такого как TextInputEditText!
Я тоже столкнулся с этим. Оказывается, проблема была вызвана установкой текста подсказки в 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>
Создайте собственный стиль 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>
Что касается отслеживания проблем Google, он исправлен.
Это исправлено на Android 8.1
Если какая-либо проблема не устранена, сообщите в трекер Google, который они откроют для проверки.
Кажется, это ошибка, которая должна быть исправлена: 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, не изменяя файлы макета или действия (а затем вы можете легко удалить его, когда ошибка исправлена).
В ваших атрибутах EditText добавьте android:importantForAutofill="no"
Это должно быть временным исправлением и будет применяться только к api 26 +