Android 7.1.1 之实现 3D Touch
来源:互联网 发布:苹果笔记本mac有光驱吗 编辑:程序博客网 时间:2024/05/28 15:35
转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/68962736
- Shortcut概念
- 具体实现
- BuildConfig 配置
- 静态配置
- 动态配置
- 创建
- 删除或禁用
- 更新
- 返回栈问题
Shortcut概念
Shortcut 是Android-25(Android 7.1)新增的一项类似iOS的 3D Touch
功能的快捷方式组件,但是有着不同的表现形式,因为Android在硬件上不支持触摸压力感应,所以表现形式为长按,而iOS须用力长按。
首先,来个效果图
在 Launcher 或 应用程序列表 里面,长按应用图标,弹出一个快捷方式列表, 并且,可以把单个快捷方式拖动出来作为一个桌面图标,拖出来的图标会随着清除应用数据或卸载应用而消失,须重新创建。
具体实现
BuildConfig 配置
在主module下,修改 build.grade,使其使用 android-25 的 API 编译,当然,未下载的,就需要打开Android SDK Manager下载一下。
android { compileSdkVersion 25 buildToolsVersion "25.0.0" // 或以上 defaultConfig { targetSdkVersion 25 }}
静态配置
类似BroadCastReceiver,Shortcut注册也分为静态注册和动态注册,首先介绍静态注册,动态注册后面继续~~
在
res/xml
文件夹底下创建一个xml,举个栗子:shortcut.xml<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"><shortcut android:enabled="true" android:icon="@mipmap/ic_bar_detail_write" android:shortcutDisabledMessage="@string/shortcut_publish" android:shortcutId="publish" android:shortcutLongLabel="@string/shortcut_publish" android:shortcutShortLabel="@string/shortcut_publish"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.yanshi.writing.ui.bar.PublishPostActivity" android:targetPackage="com.yanshi.writing" /> <categories android:name="android.shortcut.conversation" /></shortcut><shortcut android:enabled="true" android:icon="@mipmap/logo" android:shortcutDisabledMessage="@string/shortcut_write" android:shortcutId="write" android:shortcutLongLabel="@string/shortcut_write" android:shortcutShortLabel="@string/shortcut_write"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.yanshi.writing.ui.write.WriteActivity" android:targetPackage="com.yanshi.writing" /> <categories android:name="android.shortcut.conversation" /></shortcut></shortcuts>
1、enabled:表示当前快捷方式是否可使用
2、 icon: 快捷方式图标
3、 shortcutDisabledMessage: 快捷方式不可使用时显示的名字
4、 shortcutId:快捷方式标识
5、 shortcutLongLabel:长按下图标弹出来列表框中每个快捷名
6、 shortcutShortLabel:快捷是可以单独显示在桌面上的,显示名为shortcutShortLabel
7、 targetClass:点击快捷方式进入的Activity
8、categories 默认写死即可清单文件注册
在 AndroidMainfest.xml 的默认启动页里添加meta-data
标签配置<activity android:name=".ui.MainActivity" android:configChanges="orientation|screenSize|keyboardHidden" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoneTranslucent"> <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/shortcut" /> </activity>
- 完毕! 可以到桌面查看效果了~~
动态配置
动态创建增加了菜单配置的灵活性,比如可以从服务端拉取快捷方式列表,再进行展示。具体配置方法如下:
创建
在需要注册的地方添加如下代码:
/** * 动态创建 */ public void register() { ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class); List<ShortcutInfo> infos = new ArrayList<>(); // 按下返回按钮跳转的activity Intent intent1 = new Intent(this, MainActivity.class); intent1.setAction(Intent.ACTION_VIEW); // 目标activity Intent intent2 = new Intent(this, PublishPostActivity.class); intent2.setAction("com.yuyh.xxx.BACK"); Intent[] intents = new Intent[2]; intents[0] = intent1; intents[1] = intent2; ShortcutInfo info = new ShortcutInfo.Builder(this, "publish-2") .setShortLabel("动态创建-发布帖子") .setLongLabel("动态创建-发布帖子") .setIcon(Icon.createWithResource(this, R.mipmap.ic_bar_detail_write)) .setIntents(intents) .build(); infos.add(info); mShortcutManager.setDynamicShortcuts(infos); }
重新运行app,再次长按,效果如下:
删除或禁用
动态删除可以删除动态配置的快捷方式。
/** * 动态删除 */public void delete() { ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class); /********* 移除弹出列表图标 **********/ // 所有动态创建图标 List<ShortcutInfo> infos1 = mShortcutManager.getDynamicShortcuts(); List<String> ids1 = new ArrayList<>(); for (ShortcutInfo info : infos1 ) { ids1.add(info.getId()); } // 禁用所有的快捷方式 mShortcutManager.disableShortcuts(ids1, "已禁用"); mShortcutManager.removeDynamicShortcuts(ids1); /********* 移除拖出来的桌面快捷图标 **********/ // 放在桌面的图标 List<ShortcutInfo> infos2 = mShortcutManager.getPinnedShortcuts(); List<String> ids2 = new ArrayList<>(); for (ShortcutInfo info : infos2 ) { ids2.add(info.getId()); } mShortcutManager.disableShortcuts(ids2, "已禁用"); mShortcutManager.removeAllDynamicShortcuts();}
代码比较简单,就不多做叙述了。 须注意一下 getPinnedShortcuts
方法与 getDynamicShortcuts
方法的区别! 禁用后的效果如图所示,图标变成灰色:
更新
快捷方式的唯一性,由前面提到的 shortcutId
这个标识符决定,所以更新快捷方式与创建快捷方式一样, shortcutId
如果相同, 则会覆盖之前创建的快捷方式!
返回栈问题
当通过快捷方式打开时,现有的Activity都会被销毁,然后重新创建一个Activity栈。因为清单方式设置的快捷键的Intent不能自定义Intent的Flag,其默认的Flag是 FLAG_ACTIVITY_NEW_TASK
和 FLAG_ACTIVITY_CLEAR_TASK
。
通过动态注册的方式,可发现,我们可以配置返回目标activity。当然,静态配置也可以实现,修改shortcut标签:
<shortcut android:enabled="true" android:icon="@mipmap/ic_bar_detail_write" android:shortcutDisabledMessage="@string/shortcut_publish" android:shortcutId="publish" android:shortcutLongLabel="@string/shortcut_publish" android:shortcutShortLabel="@string/shortcut_publish"> <!-- 返回目标activity --> <intent android:action="com.yuyh.xxx.BACK" android:targetClass="com.yanshi.writing.ui.MainActivity" android:targetPackage="com.yanshi.writing" /> <!-- 目标activity --> <intent android:action="android.intent.action.VIEW" android:targetClass="com.yanshi.writing.ui.bar.PublishPostActivity" android:targetPackage="com.yanshi.writing" /> <categories android:name="android.shortcut.conversation" /> </shortcut>
感谢阅读!
- Android 7.1.1 之实现 3D Touch
- Android 7.1.1 之实现 3D Touch
- iOS之实现3D Touch
- Android App 快捷方式之 Android 版本的 3D Touch
- ios9 3D Touch 实现
- 3D Touch 的实现:
- iOS 9 新特性之实现 3D Touch
- iOS9上实现3D Touch功能之快速启动
- iOS新特性之实现3D Touch
- ios 3D Touch功能的实现
- ios 3D Touch功能的实现
- iOS 3D Touch 实现UITableViewCell 预览
- iOS 9之3D Touch
- iOS 9 之 3D touch
- iOS开发之3D Touch
- 【IOS】iphone6s 3d touch之HelloWorld
- iOS开发-------3D Touch之ApplicationShortcutItem
- 3D Touch功能之shortcut简析
- 最短路径的两种算法
- 仿printf实现
- ip地址定位2
- 基础测试理论与实践-连载(一):写的背景与动机
- bash 基本技巧
- Android 7.1.1 之实现 3D Touch
- 【Java之容器】1.Map基本用法
- laravel 访问时路径前老是要加个public
- 泛型
- 链表
- android 如何判断app 运行在后台
- Ubuntu 下python开发环境的搭建
- 基于python 的分类算法模板 -- 数据库索引、特征提取、分类、分类结果查看
- h1203动态规划