Android中的3D Touch你听说过吗?
/ 今日科技快讯 /
昨日,针对美国联邦通信委员会(FCC)禁止华为参与联邦补贴资金项目的决定,华为在深圳总部召开新闻发布会宣布,华为今天在美国法院提交起诉书,请求法院认定美国联邦通信委员会有关禁止华为参与联邦补贴资金项目的决定违反了美国宪法和《行政诉讼法》。华为称,FCC的认定结果随意武断,未给予华为行使正当程序的机会。
/ 作者简介 /
明天就是周六啦,提前祝大家周末愉快!
本篇文章来自Android_zhu_jiang的投稿,分享了Shortcut多种使用方式,相信会对大家有所帮助!同时也感谢作者贡献的精彩文章。
Android_zhu_jiang的博客地址:
https://me.csdn.net/haojiagou
/ 前因后果 /
苹果在iPhone 6s和iPhone 6s Plus开始新增了3D Touch,这个功能褒贬不一,但我觉得还是特别好用的,特别是在微信上付款、加好友、扫二维码,或是在支付宝上付款等等场景。好用的真的是不要不要的,下面是苹果3D Touch的截图:
这么好用的功能安卓能不模仿吗?呸!能不实现吗?
从安卓7.1(25)开始,系统新增了Shortcut来实现类似苹果3D Touch的功能,实现效果如下:
苹果的3D Touch是通过检测手指按压力度来判断是否弹出,安卓硬件没办法统一,所以统一采用长按的方式来实现。
/ 开始实现 /
实现呢,一共有三种方式,安卓官方是这样来描述的:
我就用官方直译来翻译下凑合理解吧:
创建快捷方式
快捷方式可帮助用户快速访问应用程序的各个部分,从而为用户提供特定类型的内容。
使用快捷方式交付内容的方式取决于您的用例以及快捷方式的上下文是应用程序驱动还是用户驱动。尽管静态快捷方式的上下文不会更改,而动态快捷方式的上下文会不断更改,但是在两种情况下,上下文都是由您的应用程序驱动的。
如果用户选择自己希望您的应用向其交付内容的方式(例如固定快捷方式),则上下文由用户定义。以下方案演示了每种快捷方式类型的一些用例:
静态快捷方式 最适合在用户与应用程序互动的整个生命周期中使用一致结构链接到内容的应用程序。由于大多数启动器一次 只能显示四个快捷方式,因此静态快捷方式对于常见活动很有用。例如,如果用户希望以特定方式查看其日历或电子邮件,则使用静态快捷方式可确保他们执行例行任务的经验是一致的。
动态快捷键 用于上下文相关的应用程序中的操作。例如,如果您构建的游戏允许用户在启动时从其当前级别开始,则快捷方式将需要经常更新。使用动态快捷方式允许每次用户清除级别时更新该快捷方式。
固定的快捷方式 用于特定的,用户驱动的操作。例如,用户可能想要将特定网站固定到启动器。这是有好处的,因为与使用浏览器的默认实例相比,它使用户可以更快地执行自定义操作,例如一步导航到网站。
静态快捷方式
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:enabled="true"
android:icon="@drawable/one"
android:shortcutDisabledMessage="@string/static_disabled_message"
android:shortcutId="staticId"
android:shortcutLongLabel="@string/static_shortcut_long_label"
android:shortcutShortLabel="@string/static_shortcut_short_label">
<categories android:name="android.shortcut.conversation" />
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.zj.shortcut.Main2Activity"
android:targetPackage="com.zj.shortcut" />
</shortcut>
</shortcuts>
android:shortcutId 和 android:shortcutShortLabel 是必填值,其他都是可选的。
android:shortcutId 字符串文字,表示对象对其执行操作时的快捷方式。
android:shortcutShortLabel 简短的描述,描述了快捷方式的用途。尽可能将快捷方式的“简短描述”的长度限制为10个字符,不然在手机上显示效果可能不太好。
android:shortcutLongLabel 描述该快捷方式用途的扩展短语。如果有足够的空间,启动器将显示此值而不是上面的简短的描述。如果可能,将快捷方式的“详细描述”的长度限制为25个字符。
android:shortcutDisabledMessage当用户尝试启动禁用的快捷方式时,在受支持的启动器中显示的消息。该消息应向用户说明为什么现在禁用了快捷方式。如果android:enabled为,则此属性的值无效true。
android:enabled 确定用户是否可以与受支持的启动器中的快捷方式进行交互。默认值android:enabled是true。如果将其设置为false,则还应该设置一个android:shortcutDisabledMessage,以说明为什么禁用了快捷方式。如果您不需要提供这样的消息,则最简单的方法是从XML文件中完全删除快捷方式。
android:icon 启动器在向用户显示快捷方式时使用的 位图 或 自适应图标。该值可以是图像的路径,也可以是包含该图像的资源文件。尽可能使用自适应图标来提高性能和一致性。
<string name="static_shortcut_long_label">测试长标题</string>
<string name="static_shortcut_short_label">测试短标题</string>
https://developer.android.google.cn/reference/android/content/pm/ShortcutManager.html
发布:使用 setDynamicShortcuts()重新定义动态快捷键的完整列表,或者使用 addDynamicShortcuts() 以增加动态快捷键的现有列表。 更新:使用 updateShortcuts()方法。 删除:使用删除一组动态快捷方式 removeDynamicShortcuts(),或使用 删除所有动态快捷方式 removeAllDynamicShortcuts()。
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val shortcutManager = getSystemService<ShortcutManager>(ShortcutManager::class.java)
val shortcut = ShortcutInfo.Builder(this, "id1")
.setShortLabel("Website")
.setLongLabel("Open the website")
.setIcon(Icon.createWithResource(this, R.drawable.ic_launcher_background))
.setIntent(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.baidu.com/"))
)
.build()
shortcutManager!!.dynamicShortcuts = listOf(shortcut)
}
固定快捷方式
如果快捷方式已经存在,请创建一个 ShortcutInfo仅包含现有快捷方式ID的对象。系统会自动查找并固定与快捷方式相关的所有其他信息 如果要固定新的快捷方式,请创建一个ShortcutInfo对象,其中包含新快捷方式 的ID,意图和简短标签。 注意:因为系统会自动对固定的快捷方式执行 备份和还原,所以这些快捷方式的ID应该包含稳定,恒定的字符串或服务器端标识符,而不是本地生成的标识符,这些标识符在其他设备上可能没有意义。
private fun initShortcut() {
val shortcutManager = getSystemService(ShortcutManager::class.java)
if (shortcutManager!!.isRequestPinShortcutSupported) {
val pinShortcutInfo = ShortcutInfo.Builder(this, "id1")
.setShortLabel("Website")
.setLongLabel("Open the website")
.setIcon(Icon.createWithResource(this, R.drawable.ic_launcher_background))
.setIntent(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.baidu.com/"))
)
.build()
val pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo)
val successCallback = PendingIntent.getBroadcast(this, /* request code */ 0,
pinnedShortcutCallbackIntent, /* flags */ 0)
shortcutManager.requestPinShortcut(pinShortcutInfo,
successCallback.intentSender)
}
}