Android 設(shè)備上可以實(shí)現(xiàn) 3D Touch 嗎?|原力計(jì)劃
- 來(lái)源:互聯(lián)網(wǎng)
- |
- 2020-01-09
- |
- 0 條評(píng)論
- |
- |
- T小字 T大字

作者 | Android_zhu_jiang
責(zé)編 | 屠敏
出品 | CSDN 博客
蘋(píng)果在iPhone 6s和iPhone 6s Plus開(kāi)始新增了3D Touch,這個(gè)功能褒貶不一,但我覺(jué)得還是特別好用的,特別是在微信上付款、加好友、掃二維碼,或是在支付寶上付款等等場(chǎng)景。好用的真的是不要不要的,下面是蘋(píng)果3D Touch的截圖:

這么好用的功能安卓能不模仿嗎?呸!能不實(shí)現(xiàn)嗎?
從安卓7.1(25)開(kāi)始,系統(tǒng)新增了Shortcut來(lái)實(shí)現(xiàn)類似蘋(píng)果3D Touch的功能,實(shí)現(xiàn)效果如下:

蘋(píng)果的3D Touch是通過(guò)檢測(cè)手指按壓力度來(lái)判斷是否彈出,安卓硬件沒(méi)辦法統(tǒng)一,所以統(tǒng)一采用長(zhǎng)按的方式來(lái)實(shí)現(xiàn)。
開(kāi)始實(shí)現(xiàn)
實(shí)現(xiàn)呢,一共有三種方式,安卓官方是這樣來(lái)描述的:

我就用官方直譯來(lái)翻譯下湊合理解吧:
創(chuàng)建快捷方式
快捷方式可幫助用戶快速訪問(wèn)應(yīng)用程序的各個(gè)部分,從而為用戶提供特定類型的內(nèi)容。
使用快捷方式交付內(nèi)容的方式取決于您的用例以及快捷方式的上下文是應(yīng)用程序驅(qū)動(dòng)還是用戶驅(qū)動(dòng)。盡管靜態(tài)快捷方式的上下文不會(huì)更改,而動(dòng)態(tài)快捷方式的上下文會(huì)不斷更改,但是在兩種情況下,上下文都是由您的應(yīng)用程序驅(qū)動(dòng)的。如果用戶選擇自己希望您的應(yīng)用向其交付內(nèi)容的方式(例如固定快捷方式),則上下文由用戶定義。以下方案演示了每種快捷方式類型的一些用例:
靜態(tài)快捷方式 最適合在用戶與應(yīng)用程序互動(dòng)的整個(gè)生命周期中使用一致結(jié)構(gòu)鏈接到內(nèi)容的應(yīng)用程序。由于大多數(shù)啟動(dòng)器一次 只能顯示四個(gè)快捷方式,因此靜態(tài)快捷方式對(duì)于常見(jiàn)活動(dòng)很有用。例如,如果用戶希望以特定方式查看其日歷或電子郵件,則使用靜態(tài)快捷方式可確保他們執(zhí)行例行任務(wù)的經(jīng)驗(yàn)是一致的。動(dòng)態(tài)快捷鍵 用于上下文相關(guān)的應(yīng)用程序中的操作。例如,如果您構(gòu)建的游戲允許用戶在啟動(dòng)時(shí)從其當(dāng)前級(jí)別開(kāi)始,則快捷方式將需要經(jīng)常更新。使用動(dòng)態(tài)快捷方式允許每次用戶清除級(jí)別時(shí)更新該快捷方式。固定的快捷方式 用于特定的,用戶驅(qū)動(dòng)的操作。例如,用戶可能想要將特定網(wǎng)站固定到啟動(dòng)器。這是有好處的,因?yàn)榕c使用瀏覽器的默認(rèn)實(shí)例相比,它使用戶可以更快地執(zhí)行自定義操作,例如一步導(dǎo)航到網(wǎng)站。
靜態(tài)快捷方式
1、在AndroidManifest.xml中找見(jiàn)你的啟動(dòng)項(xiàng)Activity,在其中添加一個(gè)元素,該元素引用定義了應(yīng)用程序快捷方式的資源文件:
<activityandroid:name=".MainActivity"><intent-filter><actionandroid:name="android.intent.action.MAIN" /><categoryandroid:name="android.intent.category.LAUNCHER" /></intent-filter><meta-dataandroid:name="android.app.shortcuts"android:resource="@xml/shortcuts" /></activity>
2、上面的shortcuts文件詳情如下,其中定義了基本參數(shù)和意圖:
<?xml version="1.0" encoding="utf-8"?><shortcutsxmlns:android="http://schemas.android.com/apk/res/android"><shortcutandroid: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"><categoriesandroid:name="android.shortcut.conversation" /><intentandroid:action="android.intent.action.VIEW"android:targetClass="com.zj.shortcut.Main2Activity"android:targetPackage="com.zj.shortcut" /></shortcut></shortcuts>
3、上面的文件中有很多的屬性,下面來(lái)一一講解一下:
android:shortcutId 和 android:shortcutShortLabel 是必填值,其他都是可選的。 android:shortcutId 字符串文字,表示對(duì)象對(duì)其執(zhí)行操作時(shí)的快捷方式。android:shortcutShortLabel 簡(jiǎn)短的描述,描述了快捷方式的用途。盡可能將快捷方式的“簡(jiǎn)短描述”的長(zhǎng)度限制為10個(gè)字符,不然在手機(jī)上顯示效果可能不太好。android:shortcutLongLabel 描述該快捷方式用途的擴(kuò)展短語(yǔ)。如果有足夠的空間,啟動(dòng)器將顯示此值而不是上面的簡(jiǎn)短的描述。如果可能,將快捷方式的“詳細(xì)描述”的長(zhǎng)度限制為25個(gè)字符。android:shortcutDisabledMessage 當(dāng)用戶嘗試啟動(dòng)禁用的快捷方式時(shí),在受支持的啟動(dòng)器中顯示的消息。該消息應(yīng)向用戶說(shuō)明為什么現(xiàn)在禁用了快捷方式。如果android:enabled為,則此屬性的值無(wú)效true。 android:enabled 確定用戶是否可以與受支持的啟動(dòng)器中的快捷方式進(jìn)行交互。默認(rèn)值android:enabled是true。如果將其設(shè)置為false,則還應(yīng)該設(shè)置一個(gè)android:shortcutDisabledMessage,以說(shuō)明為什么禁用了快捷方式。如果您不需要提供這樣的消息,則最簡(jiǎn)單的方法是從XML文件中完全刪除快捷方式。android:icon 啟動(dòng)器在向用戶顯示快捷方式時(shí)使用 的位圖 或 自適應(yīng)圖標(biāo)。該值可以是圖像的路徑,也可以是包含該圖像的資源文件。盡可能使用自適應(yīng)圖標(biāo)來(lái)提高性能和一致性。4、上面的字符串都定義在了res->value->string.xml中,下面是代碼:
<string name="static_disabled_message">測(cè)試信息</string> <string name="static_shortcut_long_label">測(cè)試長(zhǎng)標(biāo)題</string> <string name="static_shortcut_short_label">測(cè)試短標(biāo)題</string>
5、下面來(lái)看一下靜態(tài)展示安卓的“3D Touch”:

動(dòng)態(tài)快捷方式
1、動(dòng)態(tài)快捷鍵提供了指向應(yīng)用程序中特定于上下文的特定操作的鏈接。這些操作可能會(huì)在您的應(yīng)用使用之間發(fā)生變化,甚至在應(yīng)用運(yùn)行時(shí)也會(huì)發(fā)生變化。動(dòng)態(tài)快捷方式的選擇包括呼叫特定人員,導(dǎo)航至特定位置以及從用戶的最后保存點(diǎn)加載游戲等等。
這是ShortcutManagerAPI的地址:https://developer.android.google.cn/reference/android/content/pm/ShortcutManager.html
發(fā)布:使用 setDynamicShortcuts()重新定義動(dòng)態(tài)快捷鍵的完整列表,或者使用 addDynamicShortcuts() 以增加動(dòng)態(tài)快捷鍵的現(xiàn)有列表。更新:使用 updateShortcuts()方法。刪除:使用刪除一組動(dòng)態(tài)快捷方式 removeDynamicShortcuts(),或使用 刪除所有動(dòng)態(tài)快捷方式 removeAllDynamicShortcuts()。2、下面是動(dòng)態(tài)添加快捷方式的代碼(注意要加版本注解):
@TargetApi(Build.VERSION_CODES.N_MR1)@RequiresApi(Build.VERSION_CODES.M)overridefunonCreate(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) }
3、下面是添加完之后運(yùn)行界面樣式:

固定快捷方式
在Android 8.0(API級(jí)別26)及更高版本上,可以創(chuàng)建固定的快捷方式。與靜態(tài)和動(dòng)態(tài)快捷方式不同,固定的快捷方式在支持的啟動(dòng)器中顯示為單獨(dú)的圖標(biāo)。圖1顯示了這兩種快捷方式之間的區(qū)別。

1、使用 isRequestPinShortcutSupported()驗(yàn)證應(yīng)用程序內(nèi)設(shè)備的默認(rèn)啟動(dòng)支持快捷鍵。
2、ShortcutInfo根據(jù)快捷方式是否已存在,以兩種方式之一創(chuàng)建對(duì)象:
如果快捷方式已經(jīng)存在,請(qǐng)創(chuàng)建一個(gè) ShortcutInfo僅包含現(xiàn)有快捷方式ID的對(duì)象。系統(tǒng)會(huì)自動(dòng)查找并固定與快捷方式相關(guān)的所有其他信息如果要固定新的快捷方式,請(qǐng)創(chuàng)建一個(gè)ShortcutInfo對(duì)象,其中包含新快捷方式 的ID,意圖和簡(jiǎn)短標(biāo)簽。注意:因?yàn)橄到y(tǒng)會(huì)自動(dòng)對(duì)固定的快捷方式執(zhí)行 備份和還原,所以這些快捷方式的ID應(yīng)該包含穩(wěn)定,恒定的字符串或服務(wù)器端標(biāo)識(shí)符,而不是本地生成的標(biāo)識(shí)符,這些標(biāo)識(shí)符在其他設(shè)備上可能沒(méi)有意義。3、通過(guò)調(diào)用將快捷方式固定到設(shè)備的啟動(dòng)器 requestPinShortcut()。在此過(guò)程中,可以傳入一個(gè) PendingIntent對(duì)象,該對(duì)象僅在成功固定快捷方式后才通知應(yīng)用。
注意:如果用戶不允許將快捷方式固定在啟動(dòng)器上,則您的應(yīng)用不會(huì)收到回調(diào)。固定快捷方式后,可以使用 updateShortcuts()方法更新其內(nèi)容 。
4、下面是創(chuàng)建固定快捷方式的代碼:
@SuppressLint("NewApi")privatefuninitShortcut() {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) } }
5、運(yùn)行結(jié)果如下:

版權(quán)聲明:本文為CSDN博主「Android_zhu_jiang」的原創(chuàng)文章,僅用于技術(shù)交流,分享心得。
想為博主點(diǎn)贊?
想要請(qǐng)教博主?
相關(guān)搜索
- ios11描述文件
- 應(yīng)用程序未安裝
- 描述文件
- 手機(jī)軟件圖標(biāo)大全
- 安卓啟動(dòng)器推薦
- 安卓上下文
- 標(biāo)簽:
- 編輯:李娜
- 相關(guān)文章