技术问询:长按应用外部图标打开菜单及实现长按显示选项
长按图标弹出菜单的实现方案
一、桌面长按应用图标弹出快捷菜单(对应你截图的效果)
这是Android系统自带的App Shortcuts功能,实现步骤如下:
- 配置静态快捷项
在res目录下新建xml文件夹,创建shortcuts.xml文件,填入以下内容(按需修改):
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:shortcutId="open_setting" android:enabled="true" android:icon="@drawable/ic_setting" android:shortcutShortLabel="@string/setting_short" android:shortcutLongLabel="@string/setting_long" android:shortcutDisabledMessage="@string/setting_disabled"> <intent android:action="android.intent.action.VIEW" android:targetPackage="com.your.app.package" android:targetClass="com.your.app.package.SettingActivity"/> <categories android:name="android.shortcut.conversation"/> </shortcut> <!-- 可以添加更多快捷项 --> </shortcuts>
然后在AndroidManifest.xml的主Activity(桌面图标对应的Activity)里添加引用:
<activity android:name=".MainActivity"> <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>
- 动态添加快捷项(适合需更新的场景)
如果需要根据用户操作动态添加快捷选项,用代码实现:
val shortcutManager = getSystemService(ShortcutManager::class.java) // 判断系统是否支持固定快捷项 if (shortcutManager.isRequestPinShortcutSupported) { val shortcut = ShortcutInfo.Builder(this, "dynamic_action") .setShortLabel("快速新建") .setLongLabel("快速创建新内容") .setIcon(Icon.createWithResource(this, R.drawable.ic_new)) .setIntent(Intent(this, NewContentActivity::class.java)) .build() // 请求用户添加到桌面快捷项 shortcutManager.requestPinShortcut(shortcut, null) }
二、应用内长按图标弹出菜单
如果是自己应用界面里的图标,长按弹出选项用PopupMenu即可:
- 给图标设置长按监听:
val targetIcon = findViewById<ImageView>(R.id.target_icon) targetIcon.setOnLongClickListener { v -> val popup = PopupMenu(this, v) // 加载菜单布局 popup.menuInflater.inflate(R.menu.icon_popup_menu, popup.menu) // 设置菜单点击事件 popup.setOnMenuItemClickListener { item -> when(item.itemId) { R.id.menu_share -> { // 处理分享逻辑 true } R.id.menu_delete -> { // 处理删除逻辑 true } else -> false } } popup.show() true }
- 创建菜单布局
res/menu/icon_popup_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_share" android:title="分享"/> <item android:id="@+id/menu_delete" android:title="删除"/> </menu>
补充说明
- App Shortcuts仅支持Android 7.1(API 25)及以上版本;
- 静态快捷项安装应用后直接生效,动态快捷项需要用户确认才能添加;
- 自定义PopupMenu可通过样式文件修改外观,适配应用风格。
内容的提问来源于stack exchange,提问作者Nabin Dhakal
相关产品推荐
相关产品推荐

