【问题标题】:Android O autofill feature for firstname, lastname and birthdayAndroid O 自动填充名字、姓氏和生日的功能
【发布时间】:2018-03-14 15:50:58
【问题描述】:

是否也可以在生日时使用新的 Android Oreo 自动填充功能?有没有办法区分名字和姓氏?我只在 API 文档中看到了 AUTOFILL_HINT_NAME。

【问题讨论】:

    标签: android autofill android-8.0-oreo


    【解决方案1】:

    在工作浪费了一天之后,尝试为名字添加autofillHints,因为显然family-name 适用于谷歌自动填充服务:@ 但对名字没有任何作用。所以我检查了 Facebook 应用程序和 Flixbus 并猜测它们都可以自动填充名字,我非常绝望,我尝试了 cc-given-name 并且它成功了!!!!!!即使手机上的谷歌帐户名称是公司的,并且之前没有输入任何信用卡。 可悲的是,Android 团队中没有人愿意提及family-name 提示或cc-given-name 确实存在的事实,无论您之前是否曾使用您的帐户填写过信用卡信息。

    所以对我来说,我只使用了 EditText 没有任何标签左右,但我必须添加 android:hint="First name"android:hint="Last name" 才能显示自动完成,所以没有提示它不起作用。 所以它是这样的:(为简单起见,删除了 ids、layout_width/height 和方向)

    <LinearLayout android:orientation="horizontal">
        <EditText 
            android:autofillHints="cc-given-name"
            android:hint="First name"/>
        <EditText
            android:autofillHints="family-name"
            android:hint="Last name"/>
    </LinearLayout>
    

    【讨论】:

      【解决方案2】:

      这些属性 View.AUTOFILL_HINT_* 不是详尽的,而是建议。在android:autofillHints 中,您可以从文档中设置任何您喜欢的字符串,甚至可以设置多个以逗号分隔的字符串:

      描述视图的内容,以便自动填充服务可以填充适当的数据。多个提示可以组合在逗号分隔列表或字符串数​​组中,以表示例如电子邮件地址或邮政地址。

      自动填充服务接收这些提示,并根据它们的算法实现返回一个FillResponse 数据集,其中包含可能要填充的数据。

      该服务甚至可以在节点中查找包含“名字”等标签的视图,以确定您的 EditText 需要名字而不是全名。您可以在autofillHint 中输入“名字”,但只有当用户拥有包含名字数据的自动填充服务并且他的算法足够聪明以匹配它时,它才会起作用。

      简而言之,不能保证自动填充对特定用户有效,但有一些程序会增加机会:

      1. 把你认为可以提供帮助的autofillHint 用逗号隔开。请记住使用其他系统使用的常量或行业标准,例如 HTML 标准使用 given-name 作为名字。如果 Google 自动填充开始支持名字和姓氏,这可能是其匹配算法的候选者,那么 android:autofillHint="first-name,given-name,display-name" 将有很高的匹配概率。
      2. 如果您使用一些TextView 作为标签,请使用android:importantForAutofill="yes",并尝试放入同一个视图节点。
      3. 使用 EditTextAutocompleteTextView 和其他已针对自动填充优化的视图。
      4. 使用诸如“android:label”之类的属性,如果您的提示不够好,它们很可能会被自动填充服务的启发式使用。

      查看此autofill optmize Android guide 了解更多提示。

      查看list of HTML standard autofill tags

      【讨论】:

        【解决方案3】:

        现在记录了更多自动填充提示值

        https://developer.android.com/reference/androidx/autofill/HintConstants

        我将这些值用于名字和姓氏,并且效果很好

        • 用于姓氏/姓氏 -> ".AUTOFILL_HINT_PERSON_NAME_FAMILY"
        • 对于名字/名字 -> ".AUTOFILL_HINT_PERSON_NAME_GIVEN"

        注意:有个“.”在这两个字符串的开头。

        我发现自动填充 UI 有点混乱,因为在填写名字字段时弹出窗口会显示全名(见下面的屏幕截图)。但是当用户点击他们的全名时,名字和姓氏字段都会同时填写,这很酷!

        【讨论】:

          【解决方案4】:

          是否也可以在生日时使用新的 Android Oreo 自动填充功能?

          没有。希望很少有人会在同一个应用中重复输入他们的生日。

          有没有办法区分名字和姓氏?

          没有。

          Android 的自动填充功能支持HTML5's autocomplete detail tokens 的一小部分。

          【讨论】:

          • 这不是重复将数据输入同一个应用程序。据我了解,该功能在系统范围内有效。因此,如果自动填充服务知道您的生日,它可以在任何支持它的应用程序中为您自动填充。
          • @StefanArn:无论如何都不支持生日。
          • 生日目前是 HTML 标准的一部分,如 bday、bday-day、bday-month、bday-year:developer.mozilla.org/en-US/docs/Web/HTML/Attributes/…
          猜你喜欢
          • 2015-04-28
          • 1970-01-01
          • 1970-01-01
          • 2016-02-22
          • 2021-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-08
          相关资源
          最近更新 更多