You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

长按widget时如何在删除与info选项之间新增「Settings」按钮

安卓桌面Widget长按新增Settings按钮实现方案

以下实现逻辑完全对齐三星日历Widget的交互效果:

实现核心思路

三星日历的交互本质是在Widget长按触发的操作菜单中,在系统默认的删除、信息按钮中间插入自定义设置项,可根据适配范围选择以下两种实现方案:


方案1:One UI专属适配(仅三星设备生效,无需自定义布局)

直接对接三星系统开放的Widget快捷操作注册能力,在系统原生的长按菜单中插入Settings按钮:

  • 在Widget的Provider配置中新增三星官方定义的快捷操作元数据,指定Settings按钮的显示文案与跳转Intent
  • 系统会自动按照「删除→Settings→信息」的顺序渲染按钮,无需处理菜单布局与交互逻辑

方案2:全安卓版本通用实现

兼容所有安卓桌面launcher,自己处理长按事件与自定义菜单渲染:

  1. 给Widget根布局绑定长按事件响应
    为RemoteViews的根控件设置长按触发的PendingIntent,代码示例如下:
    val remoteViews = RemoteViews(context.packageName, R.layout.your_widget_layout)
    // 绑定长按事件触发的广播,用于唤起自定义菜单
    val longClickPendingIntent = PendingIntent.getBroadcast(
        context,
        REQUEST_CODE_LONG_CLICK,
        Intent(context, WidgetLongClickReceiver::class.java).apply {
            putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId)
            putExtra("widget_position", intArrayOf(clickX, clickY))
        },
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
    remoteViews.setOnLongClickPendingIntent(R.id.widget_root, longClickPendingIntent)
    AppWidgetManager.getInstance(context).updateAppWidget(currentWidgetId, remoteViews)
    
  2. 实现自定义悬浮菜单
    菜单布局严格按照三星交互设置按钮顺序:删除按钮 → Settings按钮 → 信息按钮,同时处理以下交互细节:
    • 菜单弹出位置对齐长按坐标,避免偏移出屏幕
    • 长按触发菜单时,Widget本身显示半透明高亮遮罩
    • 点击菜单外区域、按返回键自动关闭菜单
  3. 绑定按钮点击逻辑
    • 删除按钮:调用AppWidgetManager.removeAppWidget()接口移除当前Widget,同时关闭菜单
    • Settings按钮:跳转自定义的Widget配置页面,配置修改完成后调用更新接口刷新Widget显示
    • 信息按钮:跳转系统应用信息页或者自定义的Widget说明页,跳转前先关闭菜单

注意事项

  • 部分原生launcher会默认拦截Widget的长按事件弹出系统菜单,如需优先触发自定义菜单,可在Widget配置中声明android:widgetFeatures="custom_longclick"属性规避拦截
  • Settings跳转时需携带当前Widget的ID,避免修改配置时作用到其他相同类型的Widget上

内容的提问来源于stack exchange,提问作者Filler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:48:00