【Delphi】Android 桌面图标添加快捷菜单功能
目录
一、为什么需要桌面图标长按快捷菜单
二、实现Android桌面图标快捷菜单
第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr
第二步:编辑项目中的 AndroidManifest.template.xml 文件
第三步:创建shortcuts.xml文件
第四步:创建 strings.xml 文件
第五步:创建菜单图标文件 shortcut.png
第六步:配置Deployment
第七步:实现获知用户按下【快捷菜单A】
首先,看下Android桌面图标快捷菜单的例子,在桌面上长按微信和支付宝APP图标。会出现快捷菜单,微信有三个,支付宝有4个快捷菜单。参考文档(Andrea's Blog)
自从Android 7.1 开始就支持桌面图标长按快捷菜单功能,Delphi从10.3 Rio版本开始支持,当前Android的最新版本是12,Delphi的版本是11.1了。关于Android 桌面图标快捷菜单官方资料可参考:this location of the Android’s official documentation.
一、为什么需要桌面图标长按快捷菜单
如果我们的App提供有很多功能,例如可能有好几个Form或者Frame,如果没有桌面快捷菜单,用户操作首先必须进入主界面,然后才能根据主界面的引导(菜单或者Tab)进入不同的功能界面,但是有了桌面快捷菜单后,我们就可以很方便的,很友好的让用户直接进入到程序的某个功能。例如微信的“扫一扫”和支付宝的“扫一扫”,这样是不是感觉界面更方便。关于Android的桌面图标快捷菜单功能,按照Andrea的说法,IOS从2015年的IOS9也已经支持桌面快捷菜单。
关于桌面快捷菜单,按照官方资料是支持静态和动态菜单的,本文只涉及静态菜单,动态菜单请参见Android官方资料。接下来我们通过一个例子一步一步实现Android 桌面图标快捷菜单。
首先看下我们已经是实现的效果:
二、实现Android桌面图标快捷菜单
第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr
主Form上放置一个TabControl1,然后设置两个TabItem,分别是:TabItem_Main、TabItem_ShortCut。上面分别放置显示不同信息的label。选择 Android 32编译平台,在主Form中引用如下单元:
Androidapi.JNI.App,
Androidapi.JNI.JavaTypes,
Androidapi.Helpers,
第二步:编辑项目中的 AndroidManifest.template.xml 文件
通过Delphi IDE 编辑AndroidManifest.template.xml文件,这个文件位于项目工程文件目录下,需要先编译下,否则可能还没有生成这个文件。在activity 标记中增加一行,就在intent-filter 元素的关闭符号后增加(<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />)。
...</intent-filter><!-- 下面这一句是ShortCut需要的,新增加的,位置不要编 --><meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" /></activity>
<%activity%>
程序启动的时候会检查AndroidManifest.template.xml这个文件,如果发现有android.app.shortcuts项,则会根据这个项目的信息加载APP桌面图标快捷菜单。
下面就介绍在android.app.shortcuts项中引用的XML文件(shortcuts.xml)。
第三步:创建shortcuts.xml文件
在项目根目录位置处,也就是AndroidManifest.template.xml这个文件所在的目录创建shortcuts.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"><shortcutandroid:shortcutId="myshortcut1"android:enabled="true"android:icon="@drawable/shortcut"android:shortcutShortLabel="@string/my_shortcut1"android:shortcutLongLabel="@string/my_shortcut1"android:shortcutDisabledMessage="@string/my_shortcut1_disabled"><intentandroid:action="android.intent.action.MYACTION1"android:targetPackage="com.embarcadero.ShortCut_Demo"android:targetClass="com.embarcadero.firemonkey.FMXNativeActivity"/><categories android:name="android.shortcut.conversation"/></shortcut>
</shortcuts>
说明:
- 需要提供一个shortcutId值,这是一个字符串,本例中是"myshortcut1",不需要双引号。
- 需要提供一个shortcutShortLabel值,这个也是一个字符串,实际上就是我们显示快捷菜单的名字,一般长度不要超过10个字符。它是通过一个资源文件引用的,下面会介绍。
- 需要保证enabled="true",否则会不显示菜单,如果为false时,就会显示shortcutDisabledMessage。
- 可以给菜单提供一个图标(128x128),这个就是icon,本例中为:shortcut.png
- 设置 intent参数,非常重要的参数是tagetPackage,这个必须和我们当前程序的包名一致。本例为com.embarcadero.ShortCut_Demo。另外一个参数action是一个字符串,当快捷菜单激活(按下)时,系统通过这个参数告知是那个菜单按下了。
第四步:创建 strings.xml 文件
这个文件放哪里都是可以的,但是为了方便,建议放在项目根目录下,和AndroidManifest.template.xml文件在一个目录中。这个文件是一个资源文件,也是需要被引用的。
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="my_shortcut1">快捷菜单A</string><string name="my_shortcut1_disabled">Shortcut is disabled</string>
</resources>
第五步:创建菜单图标文件 shortcut.png
使用任何图标工具,创建一个快捷菜单的图标ICON。我们使用128 X 128 像素的png文件。对于图标文件,网上有很多资源,国内有名的阿里图标 icon font;国外有名的 icons8
第六步:配置Deployment
至此,我们已经创建好了两个XML文件(shortcuts.xml and strings.xml)和一个图标文件(shortcut.png)。我们需要让最终构建过程正确的引用这几个文件(最终的APK)。需要在Delphi 的 IDE 中,打开Project -> Deployment菜单,按照如下格式增加以上几个文件。
需要注意的是,上图只是配置了Debug configuration。如果需要所有的编译都增加这几个资源,请选择All configration。
说明如下:
- shortcuts.xml 的“Remote Path”,请输入:res\xml\
- strings.xml 的“Remote Path”,请输入:res\values\
- shortcut.png 的“Remote Path”,请输入: res\drawable\
恭喜!至此,我们的APP已经可以实现桌面长按快捷菜单了!!
完了吗?还没有,因为我们还没有实现如何知道用户按下的是【快捷菜单A】呢?
第七步:实现获知用户按下【快捷菜单A】
程序如果希望获知用户是通过长按桌面图标快捷菜单启动的程序,还是直接单击桌面图标启动的程序?可以通过action属性来获知。对于本例就是shortcuts.xml中定义的action属性值:android.intent.action.MYACTION1,通过在程序启动的时候判断action值就可以确定程序启动的入口到底是什么? 简单的在主窗体创建的时候判断下代码:
procedure TForm1.FormCreate(Sender: TObject);
varaction : string;
beginaction := JStringToString(TAndroidHelper.Activity.getIntent.getAction);if action = 'android.intent.action.MYACTION1' then //说明是快捷菜单TabControl1.ActiveTab := TabItem_ShortCutelseTabControl1.ActiveTab := TabItem_Main; //进入主界面Label_action.Text := action;
end;
如果用户直接进入程序,则界面tab活动的是【主界面进入显示】;如果用户是通过桌面图标长按快捷菜单【快捷菜单A】进入的,则界面tab活动的是【SHORTCUT进入界面】。
源程序下载:源程序(在Delphi 11.1下编译,如果是其他的Delphi版本,需要重新创建工程,因为AndroidManifest.template.xml文件可能因为版本不同而不同,从而导致不同版本直接使用是编译不通过的)
【Delphi】Android 桌面图标添加快捷菜单功能相关推荐
- Android 桌面图标添加未读消息角标APP角标最佳实践
Android 桌面图标添加未读消息角标APP角标最佳实践 本项目的完整演示代码 https://github.com/benchegnzhou/AndroidDevelomentArtDemo 最近 ...
- Android给ListView添加侧滑菜单功能
贼简单,但是上次集成完之后忘记整理,所以写的有点简单 SwipeMenu类 继承自ViewGroup package com.onepilltest.others;import android.con ...
- android 为桌面图标添加数字角标
android 为桌面图标添加数字角标 我的github项目 BadgeForAppIcon 看完麻烦 star 一下 在某些app的设计中,产品经理总会想当然的提出为桌面图标添加数字角标的需求.作为 ...
- Android 桌面图标长按快捷菜单
为了更快使用APP的某个功能,在手机桌面长按图标呼出快捷菜单 需要注意:在7.0以上的系统才支持该功能 两种方案可以实现该功能,第一种静态文件,不过基本上满足不了日常需求.第二种就是动态加载. Sho ...
- Android桌面图标布局,android安装运行launcher并修改桌面图标
以系统及程序的方式安装和运行Launcher,才能在Launcher启动的时候就让默认的AppWidget程序显示出来.否则将会出现 java.lang.SecurityException: bind ...
- 开始菜单中计算机栏里没有桌面图标,电脑开始菜单不见了怎么办
电脑开始菜单不见了怎么办 开始菜单是视窗操作系统(Windows)中图形用户界面(GUI)的基本部分,可以称为是操作系统的中央控制区域.下面是聚优经验网小编收集整理的电脑开始菜单不见了怎么办,欢迎阅读 ...
- android icon红点,android 桌面图标消息红点
前言 消息通知是大多数用户类app都会用到的功能,这里介绍的是当有新消息的时候,app的桌面图标像微信和qq那样右上角出现红色的消息数量红点.实现代码分为8.0-版本和8.0+版本. aaa.png ...
- Android 桌面图标右上角显示未读消息数字
背景: 在Android原生系统中,众所周知不支持桌面图标显示未读消息提醒的数字,虽然第三方控件BadgeView可以实现应用内的数字提醒.但对于系统的图标,特别是app的logo图标很难实现数字标志 ...
- One Switch一键隐藏Mac桌面图标,Mac必备功能开关
One Switch是mac必备的一键功能开关工具,小编亲测推荐. One Switch将一些Mac重要的功能集中在一个菜单工具里面,一键可以切换和启动,非常的便利,并且One Switch非常的轻量 ...
最新文章
- C++ string 类常用函数
- python基础: String类型
- 解决Geoserver请求跨域的几种思路
- SAP Spartacus B2B List里的listData$设计原理
- react native ScrollView
- Emacs基本快捷键
- Latex写分段函数
- android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商
- CSS3 新怎的伪类选择器
- 红外测距模块 51单片机_基于51单片机的红外发射和接收程序。
- 数据库备份软件带邮件发送
- angular8.x + ngx-translate实现国际化
- 【多功能改进】基于OpenCV图像采集的人脸识别网络推流及局域网无线控制系统(将图像在URL地址上输出,可做成网络摄像头,带识别框)
- java判断时间日期是否等于当前日期
- java我们一起打雪仗_一起打雪仗的作文
- 道阻且长 行者将至 ——新高考下的教学策略
- WinRAR分卷压缩与解压缩
- hwcomposer介绍
- 硬件电子开发常用工具
- 超高薪资vs安逸生活,拼多多和国家电网,选哪个?