禁用应用程序的Android O自动填充服务
Android O的功能支持Auto-filling的字段。有什么办法可以禁用它为特定的应用程序。这是我想强制我的应用程序不使用自动填充服务。禁用应用程序的Android O自动填充服务
可能吗?
要阻止自动填充为整个活动中的onCreate活动的使用():
getWindow()
.getDecorView()
.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
有没有比这更好的方法?
这可能吗?
不是我所知道的。当然,没有任何记录。
有没有比这更好的方法?
不是我所知道的。
这是固定在Android 8.1上,你可以用8测试它。1 –
创建自定义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>
'importantForAutofill'这里记录https://developer.android.com/guide/topics/text/testautofill.html#trigger_autofill_in_your_app –
目前有禁用自动填充整个应用程序没有直接的方法,因为自动填充功能是查看具体。
,您仍然可以尝试这种方式,并呼吁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 8.0奥利奥
希望这有助于提供!
我相信接受的答案是不正确:
所以,我有我自己的类,这是延伸的android.support.v7.widget.AppCompatEditText和我所做的是改写下面的方法与以下值:
@Override
public int getAutofillType() {
return AUTOFILL_TYPE_NONE;
}
没有其他解决方案的工作,甚至没有机器人:importantForAutofill = “无”。
getAutofillType()来自View类,所以它应该适用于其他类,比如TextInputEditText!
这是现在唯一可行的解决方案,它为TextInputEditText做工不错呢! –
添加代码示例以展示repo https://github.com/BukT0p/AutofillBug –
似乎是一个需要修正的错误:https://issuetracker.google.com/issues/67675432
与此同时,现在的解决方法是禁用整个项目的自动填充功能。 您可以在values-v26/styles.xml
文件中添加以下的风格,或者你可以,如果你使用的是特定的风格为您的EditText视图编辑BaseEditTextStyle。
<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,而无需更改您的布局文件或活动(稍后,您可以轻松地删除它,当bug被修复时)。
这是一个非常优雅的解决方案。感谢分享! – aashrey99
我遇到了这一点。事实证明,这个问题是由嵌套在TextInputLayout内的EditText上的提示文本造成的。
我做了一些挖掘,发现这个金块在26.0.0 Beta 2的发布说明。 Andorid Support Release Notes 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>
它解决了只TextInputEditText错误,更新我的回购(github.com/BukT0p/AutofillBug)与您的解决方案。但是AutoCompleteTextView有类似的错误。在API 27自动填充工作在同步模式,并导致UI冻结和滞后。所以,最好禁用自动填充功能,以避免不应该填充的视图 –
即使我们在此线程中使用其他建议,要禁用自动填充功能,用户仍然可以长按一个视图并选择自动填充上下文菜单。我观察到,在某些情况下,您会被告知某个视图无法自动填充,但我还没有找到该标记。我已经看到一些涉及自定义视图的自动填充选项返回NONE的解决方案,但这并不适用于所有实现。 – Azethoth
这个解决方案适用于我。用户仍然可以长时间点击输入字段并选择自动填写,但它不会崩溃 - 它什么也不做。谢谢。 –
在你的EditText属性添加android:importantForAutofill="no"
这应该是一个临时的解决办法,将只适用于API 26+
这与其他答案有何不同? –
这个答案与问题无关。它*确实与[对问题的第一条评论]有关(https://*.com/questions/45731372/disabling-android-o-auto-fill-service-for-an-application/45733114? noredirect = 1个#comment79411576_45731372)。 – CommonsWare
自动填充会导致崩溃,这是一个非常模糊的现象,当用户将焦点更改为TextInputLayout中以前填充的textInputEditText时发生:java.lang.NullPointerException:试图调用虚拟方法void android.view.View.getBoundsOnScreen在空对象引用 – Justin
发射的错误https://issuetracker.google.com/issues/67675432(android.graphics.Rect)”,请明星是 –
我找到了解决方法,请参阅我的答案!非常感谢您 – Karoly