let fw = floaty.rawWindow(
<vertical w="200" h="200" bg="#80333333">
<text id="logText" bg="#000000" textColor="#ffffff" textSize="16sp">自定义悬浮窗控制台</text>
<com.stardust.autojs.core.console.ConsoleView id="console" />
</vertical>
);

// 设置文本控件的字体大小
ui.run(function() {
fw.logText.setText("自定义字体大小");
fw.logText.setTextSize(20); // 设置字体大小为20sp
});

// 将自定义控制台与运行时控制台关联
fw.console.setConsole(runtime.console);

// 隐藏悬浮窗中的确认按钮
ui.run(function() {
fw.console.findViewById(com.stardust.autojs.R.id.input_container).visibility = android.view.View.GONE;
});

// 保持脚本运行,防止悬浮窗关闭
setInterval(() => {}, 1000);
以上是一个悬浮窗,我想在程序运行的时候输入一些日志信息在这个悬浮窗打印出来。

已存档
fangofango · 14 天前
第 1 条补充
·
14 天前

测试了运行闪一下控制台就消失了,也没有打印出信息。

第 2 条补充
·
14 天前

不行,依然没有生效。还是闪退,我想实现一个自定义悬浮窗,然后可以实时输出程序一些进度信息,并且要求悬浮窗字体大小可以自定义。

回答

Hamibot AI
1
· 14 天前

你可以使用 fw.console 对象的 log 方法来在自定义悬浮窗中打印日志信息。以下是一个示例,展示了如何在程序运行时将日志信息打印到悬浮窗中:

// 设置文本控件的字体大小
ui.run(function() {
    fw.logText.setText("自定义字体大小");
    fw.logText.setTextSize(20); // 设置字体大小为20sp
});

// 将自定义控制台与运行时控制台关联
fw.console.setConsole(runtime.console);

// 隐藏悬浮窗中的确认按钮
ui.run(function() {
    fw.console.findViewById(com.stardust.autojs.R.id.input_container).visibility = android.view.View.GONE;
});

// 打印日志信息到悬浮窗
fw.console.log("这是第一条日志信息");
fw.console.log("这是第二条日志信息");
fw.console.log("这是第三条日志信息");

// 保持脚本运行,防止悬浮窗关闭
setInterval(() => {}, 1000);

补充回答 1

可能是由于脚本执行完毕后,悬浮窗自动关闭了。你可以尝试在脚本末尾添加一个无限循环,以保持脚本运行,避免悬浮窗过早关闭。以下是修改后的代码示例:

let fw = floaty.rawWindow(
    <vertical w="200" h="200" bg="#80333333">
        <text id="logText" bg="#000000" textColor="#ffffff" textSize="16sp">自定义悬浮窗控制台</text>
        <com.stardust.autojs.core.console.ConsoleView id="console" />
    </vertical>
);

// 设置文本控件的字体大小
ui.run(function() {
    fw.logText.setText("自定义字体大小");
    fw.logText.setTextSize(20); // 设置字体大小为20sp
});

// 将自定义控制台与运行时控制台关联
fw.console.setConsole(runtime.console);

// 隐藏悬浮窗中的确认按钮
ui.run(function() {
    fw.console.findViewById(com.stardust.autojs.R.id.input_container).visibility = android.view.View.GONE;
});

// 打印日志信息到悬浮窗
fw.console.log("这是第一条日志信息");
fw.console.log("这是第二条日志信息");
fw.console.log("这是第三条日志信息");

// 保持脚本运行,防止悬浮窗关闭
setInterval(() => {}, 1000);

这样,脚本会一直运行,直到你手动停止它,悬浮窗也不会消失。


补充回答 2

根据你的需求,可以使用 floaty.rawWindow 创建一个自定义悬浮窗,并通过 ui.run 在 UI 线程中更新控件。以下是完整的示例代码,实现悬浮窗实时输出程序进度信息,并支持字体大小自定义:

// 创建自定义悬浮窗
let fw = floaty.rawWindow(
    <vertical w="300" h="200" bg="#80333333">
        <text id="logText" bg="#000000" textColor="#ffffff" textSize="16sp">初始化中...</text>
        <com.stardust.autojs.core.console.ConsoleView id="console" />
    </vertical>
);

// 设置文本控件的字体大小
ui.run(function() {
    fw.logText.setTextSize(20); // 设置字体大小为20sp
});

// 将自定义控制台与运行时控制台关联
fw.console.setConsole(runtime.console);

// 隐藏悬浮窗中的确认按钮
ui.run(function() {
    fw.console.findViewById(com.stardust.autojs.R.id.input_container).visibility = android.view.View.GONE;
});

// 模拟实时输出日志信息
function logMessage(message) {
    ui.run(function() {
        fw.logText.setText(message);
        fw.console.log(message);
    });
}

// 示例:模拟程序进度
logMessage("开始执行任务...");
setTimeout(() => {
    logMessage("任务进行中...");
}, 2000);
setTimeout(() => {
    logMessage("任务完成!");
}, 4000);

// 保持脚本运行,防止悬浮窗关闭
setInterval(() => {}, 1000);

说明:

  1. 悬浮窗创建:使用 floaty.rawWindow 创建一个自定义悬浮窗,包含一个文本控件和一个 ConsoleView
  2. 字体大小设置:通过 ui.run 在 UI 线程中修改文本控件的字体大小。
  3. 日志输出:通过 fw.console.log 实时输出日志信息到悬浮窗。
  4. 保持脚本运行:使用 setInterval 防止脚本执行完毕后悬浮窗关闭。

如果问题仍然存在,请检查是否已授予脚本必要的权限(如无障碍服务和后台弹窗权限)。

ℹ️ 本回答由 AI 生成,内容仅供参考