Floaty

floaty 模块提供了悬浮窗的相关函数,可以在屏幕上显示自定义悬浮窗,控制悬浮窗大小、位置等。

悬浮窗在脚本停止运行时会自动关闭,因此,要保持悬浮窗不被关闭,可以用一个空的 setInterval 来实现,例如:

1setInterval(() => {}, 1000);

Floaty

floaty.checkPermission()

[4.2.17 新增]

  • 返回 {boolean}

返回当前应用是否有悬浮窗权限。(不会触发请求权限操作)

floaty.requestPermission()

[4.2.17 新增]

跳转到系统的悬浮窗权限请求界面。

1if (!floaty.checkPermission()) {
2    // 没有悬浮窗权限,提示用户并跳转请求
3    toast("本脚本需要悬浮窗权限来显示悬浮窗,请在随后的界面中允许并重新运行本脚本。");
4    floaty.requestPermission();
5    exit();
6} else {
7    toastLog("已有悬浮窗权限");
8}

floaty.window(layout)

  • layout {xml} | {View} 悬浮窗界面的 XML 或者 View

指定悬浮窗的布局,创建并显示一个悬浮窗,返回一个FloatyWindow对象。

该悬浮窗自带关闭、调整大小、调整位置按键,可根据需要调用setAdjustEnabled()函数来显示或隐藏。

其中 layout 参数可以是 xml 布局或者一个 View,更多信息参见 ui 模块的说明。

例子:

1var w = floaty.window(
2    <frame gravity="center">
3        <text id="text">悬浮文字</text>
4    </frame>
5);
6setTimeout(() => {
7    w.close();
8}, 2000);

这段代码运行后将会在屏幕上显示悬浮文字,并在两秒后消失。

另外,因为脚本运行的线程不是 UI 线程,而所有对控件的修改操作需要在 UI 线程执行,此时需要用ui.run,例如:

1ui.run(function () {
2    w.text.setText("文本");
3});

有关返回的FloatyWindow对象的说明,参见下面的FloatyWindow章节。

floaty.rawWindow(layout)

  • layout {xml} | {View} 悬浮窗界面的 XML 或者 View

指定悬浮窗的布局,创建并显示一个原始悬浮窗,返回一个FloatyRawWindow对象。

floaty.window()函数不同的是,该悬浮窗不会增加任何额外设施(例如调整大小、位置按钮),您可以根据自己需要编写任何布局。

而且,该悬浮窗支持完全全屏,可以覆盖状态栏,因此可以做护眼模式之类的应用。

1var w = floaty.rawWindow(
2    <frame gravity="center">
3        <text id="text">悬浮文字</text>
4    </frame>
5);
6
7w.setPosition(500, 500);
8
9setTimeout(() => {
10    w.close();
11}, 2000);

这段代码运行后将会在屏幕上显示悬浮文字,并在两秒后消失。

有关返回的FloatyRawWindow对象的说明,参见下面的FloatyRawWindow章节。

floaty.closeAll()

关闭所有本脚本的悬浮窗。