1

我在我的快捷方式.xml 中定义了 4 个静态快捷方式(static1、static2、static3、static4) - 全部启用。一旦我添加了一个动态快捷方式 (dynamic1),最后一个静态快捷方式 (static4) 就会被动态快捷方式覆盖。因此,启动器现在显示static1, static2, static3, static4而不是static1, static2, static3, static4。当我添加第二个动态快捷方式 (dynamic2) 时,它也会覆盖 static3。

在 ShortcutManager 文档中清楚地写道,静态快捷方式总是比动态快捷方式排名更高(rank == 0),因此应该在动态快捷方式之前显示。

https://developer.android.com/guide/topics/ui/shortcuts/managing-shortcuts#display-order

当启动器显示应用程序的快捷方式时,它们应按以下顺序显示:

  1. 静态快捷方式:isDeclaredInManifest() 方法返回 true 的快捷方式。
  2. 动态快捷方式: ShortcutInfo.isDynamic() 方法返回 true 的快捷方式。在每种快捷方式类型(静态和动态)中,快捷方式根据 ShortcutInfo.getRank() 按排名递增的顺序排序。

我不确定这里出了什么问题以及如何修复它以始终显示静态快捷方式。我的动态快捷方式的目的是提供直接共享功能。

这是我添加动态快捷方式的方法:

    final ArrayList<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    final Set<String> categories = Collections.singleton("my.package.category.SOME_CATEGORY");

    final ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(context, "shortcutId")
            .setShortLabel("some_label")
            .setIcon(IconCompat.createWithResource(context, R.drawable.some_icon))
            .setIntent(new Intent(Intent.ACTION_DEFAULT))
            .setCategories(categories)
            .setPerson(
                    new Person.Builder()
                            .setName("some_name")
                            .build()
            )
            .build();

    shortcuts.add(shortcut);

    ShortcutManagerCompat.addDynamicShortcuts(context, shortcuts);
4

1 回答 1

0

虽然静态快捷方式确实总是在动态快捷方式之前,但从阅读文档来看,似乎无法保证每个组上显示的快捷方式的数量。

您应该从文档中考虑几个因素:

快捷方式限制

虽然您一次最多可以为您的应用发布五个快捷方式(静态和动态快捷方式组合),但大多数启动器只能显示四个。

那么当你在四个静态快捷方式之外添加第五个动态快捷方式时,android应该怎么做呢?如果显示所有静态的,您将永远无法向用户显示动态的。

快捷方式计数限制

每个应用程序的启动器图标最多可以包含getMaxShortcutCountPerActivity()组合的静态和动态快捷方式。但是,应用程序可以创建的固定快捷方式的数量没有限制。

所以要注意那个最大值,因为无论如何你都不能添加更多。

最佳实践

仅发布四个不同的快捷方式
尽管 API 当前支持在任何给定时间为您的应用程序组合最多五个静态和动态快捷方式,但我们建议您仅发布四个不同的快捷方式以改善它们在启动器中的视觉外观。


我不能告诉你应该做什么,但是拥有这么多静态和动态快捷方式是不可能的。虽然可以有这么多快捷方式,但由启动器选择要显示的内容。因此,您应该考虑建议的最大值 4。您可以重新考虑哪些快捷方式您认为必不可少,哪些不重要。

另一种方法可能是使用固定快捷方式作为替代方案。

于 2021-01-14T11:58:58.820 回答