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);
以上是一个悬浮窗,我想在程序运行的时候输入一些日志信息在这个悬浮窗打印出来。
测试了运行闪一下控制台就消失了,也没有打印出信息。
不行,依然没有生效。还是闪退,我想实现一个自定义悬浮窗,然后可以实时输出程序一些进度信息,并且要求悬浮窗字体大小可以自定义。
回答
你可以使用 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);
说明:
- 悬浮窗创建:使用
floaty.rawWindow
创建一个自定义悬浮窗,包含一个文本控件和一个ConsoleView
。 - 字体大小设置:通过
ui.run
在 UI 线程中修改文本控件的字体大小。 - 日志输出:通过
fw.console.log
实时输出日志信息到悬浮窗。 - 保持脚本运行:使用
setInterval
防止脚本执行完毕后悬浮窗关闭。
如果问题仍然存在,请检查是否已授予脚本必要的权限(如无障碍服务和后台弹窗权限)。