Skip to content

悬浮球

屏幕上其实有两种用法不同的球,不要混在一起:

Pro 开发器项目里(点「运行」之后,以及打包 App)
出现时机工程列表、编辑器等开发界面进入项目自己的页面
作用保持屏幕常亮;任务运行时旋转;连点两次停止任务同样这三件事,另外可以用下面的菜单定制
点球第一次变成关闭图标,3 秒内再点才停止展开功能图标,不再用连点两次

floatWindow.menusFloatWindow 只作用于项目悬浮窗。在开发器里执行脚本、或还没点「运行」时,改菜单不会改变开发器那颗球。

点项目悬浮球后,功能图标绕着球呈扇形展开。球可拖动,松手后吸附在左或右:

  • 贴右边:图标朝左展开
  • 贴左边:图标朝右展开
  • 靠顶 / 靠底:扇形收到有空间的一侧,避免画出屏幕
  • 空间仍不够(例如贴顶且图标较多):改为球内侧竖排

floatWindow.menus 默认可配 3 个,最多 5 个,超过只展示前 5 个。运行中若配置里没有「停止」,框架会自动补一个(Engines.closeAll())。

显示/隐藏这颗球、以及后台弹窗,仍用 FloatDialogs

悬浮窗权限

Android 未授予「显示在其他应用上层」时,悬浮球服务创建不了,球不会出现。是否去授权由你的 JS 决定,不要依赖系统自动弹窗。

javascript
if (!Access.isFloatWindowsEnabled()) {
    Dialogs.confirm('温馨提示', '未开启悬浮窗权限时悬浮球无法展示,是否前往系统设置授权?', function (ok) {
        if (ok) {
            Access.openFloatWindowsSetting();
        }
    });
} else {
    FloatDialogs.setFloatWindowVisible(true);
}
API作用
Access.isFloatWindowsEnabled()是否已授予悬浮窗权限
Access.openFloatWindowsSetting()打开系统悬浮窗设置,由用户自己开
FloatDialogs.setFloatWindowVisible(true/false)显示 / 隐藏这颗球(无权限时不要调用)

授权后请先回到页面,再显示悬浮球。完整交互在 Demo「能力 → 悬浮球」:pages/floatWindow

先看效果

拖球到左/右或靠顶、靠底后再点。可改图标个数(1–5,默认 3)。左侧可看 JSON、共用菜单脚本、以及页面里如何检查权限。

{
  "floatWindow": {
    "menus": [
      {
        "id": "start",
        "icon": "play",
        "label": "开始",
        "action": "start",
        "show": "idle"
      },
      {
        "id": "stop",
        "icon": "close",
        "label": "停止",
        "action": "stop",
        "show": "running"
      },
      {
        "id": "hide",
        "icon": "hide",
        "label": "隐藏",
        "action": "hide"
      },
      {
        "id": "skip",
        "icon": "img/skip.png",
        "label": "跳过",
        "onTap": "onSkip"
      }
    ]
  }
}
UI
图标个数
9:41100%
示例任务
运行中
点右侧悬浮球

点「跳过 / 日志」会切换图标。停止、开始会走 JS。再点球或点空白收起。

拖球会贴左或贴右。靠顶/靠底展开时,图标会收到有空间的一侧;放不下则竖排。

配置 menus

写在 deekeScript.jsonfloatWindow.menus。默认 3 个,最多 5 个(含框架在运行中补上的停止);超过 5 个只展示前 5 个。

json
{
  "floatWindow": {
    "menus": [
      { "id": "start", "icon": "play", "label": "开始", "action": "start", "show": "idle" },
      { "id": "stop", "icon": "close", "label": "停止", "action": "stop", "show": "running" },
      { "id": "hide", "icon": "hide", "label": "隐藏", "action": "hide" },
      { "id": "skip", "icon": "img/skip.png", "label": "跳过", "onTap": "onSkip", "show": "running" }
    ]
  }
}
参数类型说明
idString菜单项 id,给 FloatWindow.on / update
iconString内置名 close / play / hide,或工程内图片、SVG 路径
labelString图标下方短文案
actionString内置动作:stophidestartexecuteScript
fileStringactionexecuteScript 时要执行的脚本路径
onTapString点击时调用的 JS 函数名,也可再用 FloatWindow.on 绑定
showStringalways(默认)、running(脚本运行中)、idle(未运行)
backgroundString圆形底色,如 #FFFFFF

运行中若配置里没有 stop,框架会自动补一个。开始任务请自己配 action: "start",或在 JS 里调 Engines.executeScript

内置动作

action作用
stop停止全部脚本,等同 Engines.closeAll()
hide隐藏悬浮球,等同 FloatDialogs.setFloatWindowVisible(false)
start开始执行当前任务脚本
executeScript执行 file 指向的脚本(非主任务)

stop 由框架执行,不要用自定义 onTap 替换它。启动、跳过、切换图标等用 FloatWindow.on 或 JSON 的 onTap

FloatWindow.setMenus(menus)

运行时替换菜单。脚本结束后恢复成 JSON 配置。

javascript
FloatWindow.setMenus([
    { id: 'start', icon: 'play', label: '开始', action: 'start', show: 'idle' },
    { id: 'stop', icon: 'close', label: '停止', action: 'stop', show: 'running' },
    { id: 'skip', icon: 'img/skip.png', label: '跳过', onTap: function () { skipCurrent(); } }
]);

FloatWindow.on(id, fn)

给某个 id 绑定点击。也可传入对象一次绑多个。JSON 里的 onTap: "onSkip" 会找同名函数,或找 on('onSkip') / on('skip') 绑过的回调。

javascript
FloatWindow.on('skip', function () {
    FloatWindow.update('skip', { label: '已跳过', background: '#E8F5E9' });
});

FloatWindow.on({
    start: function () {
        Engines.executeScript('tasks/sample.js');
    },
    skip: function () {},
    extra: function () {}
});

FloatWindow.update(id, patch)

改某一个图标的文案、图片、底色。菜单正展开时会立刻刷新。

javascript
FloatWindow.update('skip', { label: '已跳过', icon: 'img/skip-done.png', background: '#E8F5E9' });
FloatWindow.update('skip', { visible: false });

FloatWindow.collapse()

收起已展开的菜单。

javascript
FloatWindow.collapse();

完整示例在 deekeScriptV2Demo 的「能力 → 悬浮球」:

  • pages/floatWindow/page.js:检查 / 打开悬浮窗权限、显示隐藏球、启停任务、setMenus / update / collapse
  • common/floatMenu.jsFloatWindow.on 绑定开始、跳过、日志
  • common/permission.jsensureFloat() / runScript()
  • deekeScript.jsonfloatWindow.menus
bash
git clone https://github.com/DeekeScript/deekeScriptV2Demo.git

AutoJS文档 Released under the ISC License.