我有一个活动,显示用户名UI,输入该用户名并点击“继续”按钮后,将显示输入密码UI。输入密码并点击登录按钮后,当前活动结束并启动新活动。在我的设备上,我选择了Google自动填充服务,因此在第一个活动完成后,我想要“保存为自动填充?”对话框出现,但不是。我通过添加autofillHints和我的活动中的其他内容来准备应用程序。我应该添加任何内容以使对话框弹出吗?
答案 0 :(得分:1)
我遇到了与您的案件类似的问题,请找到解决方案:
1-确保您添加了以下权限来进行显示:
<uses-permission
android:name="android.permission.BIND_AUTOFILL_SERVICE"
tools:ignore="ProtectedPermissions" />
2-假设您在登录屏幕中有三个EditText
(用户名,密码和验证码),因此必须为屏幕中的所有编辑文本添加android:importantForAutofill
。如果您错过添加操作(例如,对于验证码,则无需保存它),那么不幸的是,自动填充对话框将不会显示。
3-要保存用户名和密码,应同时添加用户名editText和密码editText:
android:importantForAutofill="yes"
对于用户名editText,您应该添加:
android:autofillHints="username"
对于密码editText,您应该添加:
android:autofillHints="password"
注意:
您不应该使用textNoSuggestions
作为密码的文本输入类型:
android:inputType="textPassword|textNoSuggestions"
相反,您应该使用:
android:inputType="textPassword"
4-您应排除不需要的editText(Captcha),以免保存,因此您应将其添加到验证码editText:
android:importantForAutofill="noExcludeDescendants"
5-这是代码段:
com.google.android.material.textfield.TextInputLayout
android:id="@+id/usernameTextInputLayout"
style="@style/TextInputStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_16"
android:layout_marginEnd="@dimen/margin_16"
android:layout_marginBottom="@dimen/margin_16"
app:endIconDrawable="@drawable/ic_username"
app:endIconMode="custom"
app:endIconTint="?attr/theme_primary">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/usernameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="username"
android:hint="@string/hint_username"
android:imeOptions="actionNext"
android:importantForAutofill="yes"
android:inputType="text"
android:maxLines="1"
android:textAlignment="viewStart" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/passwordTextInputLayout"
style="@style/TextInputStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_16"
android:layout_marginEnd="@dimen/margin_16"
android:layout_marginBottom="@dimen/margin_16"
app:endIconDrawable="@drawable/ic_password"
app:endIconMode="custom"
app:endIconTint="?attr/theme_primary">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/passwordEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="password"
android:hint="@string/hint_password"
android:importantForAutofill="yes"
android:inputType="textPassword"
android:textAlignment="viewStart" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/captchaTextInputLayout"
style="@style/TextInputStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_16"
android:layout_marginEnd="@dimen/margin_16"
android:layout_marginBottom="@dimen/margin_16"
android:importantForAutofill="noExcludeDescendants"
app:boxCornerRadiusTopEnd="0dp"
app:boxCornerRadiusTopStart="0dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/captchaEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_captcha_input"
android:imeOptions="actionNext"
android:importantForAutofill="noExcludeDescendants"
android:inputType="numberDecimal"
android:maxLength="@integer/otp_input_length"
android:maxLines="1"
android:textAlignment="viewStart" />
</com.google.android.material.textfield.TextInputLayout>
答案 1 :(得分:0)
确保同时在设备上的设置中启用了Google自动填充功能:
System > Language & Input > Autofill Service > Choose google.
取决于设备,它可能在不同的嵌套设置页面中。
如果您要创建自定义自动填充,还请确保阅读API上的文档: https://developer.android.com/guide/topics/text/autofill
答案 2 :(得分:0)
尽管遵循了文档并将autofillHints
添加到布局中,但我在模拟器上遇到了类似的行为,在使用Google自动填充服务时,对AutofillManager.commit()
的调用未触发保存UI。
FWIW,即使我未对实现进行任何更改,我也从仿真器切换到物理设备,并且保存UI开始正确触发。在这两种情况下,我都登录了Google帐户,在两种情况下,Google的示例调试自动填充服务均正确触发了保存用户界面。
我注意到您说的是“设备”,所以也许这不适用于您,但是如果您使用仿真器,那么在物理设备上进行测试可能值得一试,而且似乎没有其他解释它不会显示。