把脚本控制台放在手机屏幕左上角并且手动设置控制台大小

wrekemdkwh · 5 小时前
第 1 条补充
·
2 小时前

无法更改控制台浮窗大小,如何解决

第 2 条补充
·
2 小时前

如果使用自定义悬浮窗怎么把控制台信息打印在悬浮窗

回答

Hamibot AI
1
· 5 小时前

要将脚本控制台放在手机屏幕左上角并手动设置大小,可以使用以下代码:

// 文档地址 https://docs.hamibot.com/

// 显示控制台
console.show();

// 将控制台位置设置为左上角(0,0)
console.setPosition(0, 0);

// 设置控制台大小为屏幕宽度的1/2,高度的1/3
console.setSize(device.width / 2, device.height / 3);

这段代码会:

  1. 首先显示控制台界面
  2. 将控制台定位到屏幕左上角(坐标0,0)
  3. 将控制台宽度设置为屏幕宽度的一半,高度设置为屏幕高度的三分之一

你可以根据需要调整console.setSize()中的数值,例如:

  • 想让控制台占满整个屏幕:console.setSize(device.width, device.height)
  • 想让控制台是小窗口:console.setSize(300, 400)

注意:部分机型可能会有控制台显示问题,如果遇到不显示输入框等情况,属于已知bug。


补充回答 1

要解决无法更改控制台浮窗大小的问题,请按照以下步骤操作:

控制台大小设置需要在显示控制台后才能生效,正确的使用顺序是:

  1. 先显示控制台
  2. 再设置大小

完整示例代码:

// 文档地址 https://docs.hamibot.com/

// 1. 先显示控制台
console.show();

// 2. 然后设置大小(必须在show()之后调用)
console.setSize(device.width / 2, device.height / 2);

// 3. 可选:设置位置
console.setPosition(100, 100);

常见问题及解决方法:

  1. 调用顺序错误:必须先调用console.show()再设置大小,如果顺序颠倒会无效
  2. 未获取设备尺寸:确保使用device.widthdevice.height获取屏幕尺寸
  3. 部分机型兼容性问题:某些Android版本可能存在控制台显示问题

如果你需要创建自定义悬浮窗(不是系统控制台),应该使用floaty模块:

var window = floaty.window(
   <frame gravity="center" bg="#77ff0000">
     <text>自定义悬浮窗</text>
   </frame>
);

// 设置悬浮窗大小(-1为全屏,-2为自动调整)
window.setSize(300, 200);

setTimeout(function() {
  window.close();
}, 5000);

如果问题仍然存在,请确保你使用的是最新版本的Hamibot,并检查是否在脚本开头正确请求了悬浮窗权限:

// 请求悬浮窗权限
if(!floaty.checkPermission()){
  floaty.requestPermission();
}

补充回答 2

要将控制台信息打印在自定义悬浮窗上,你需要创建一个自定义悬浮窗并重定向日志输出。以下是具体实现方法:

// 文档地址 https://docs.hamibot.com/

// 1. 创建日志悬浮窗
var logWindow = floaty.window(
    <vertical h="300" w="*">
        <text id="logText" textSize="14sp" textColor="#ffffff" bg="#33000000" 
              padding="10" layout_weight="1" maxLines="20" scrollable="vertical"/>
        <horizontal gravity="center" h="40" bg="#22000000">
            <button id="clearBtn" text="清空" w="80"/>
            <button id="closeBtn" text="关闭" w="80"/>
        </horizontal>
    </vertical>
);

// 2. 保存原始console.log函数
var originalLog = console.log;

// 3. 重写console.log函数
console.log = function() {
    // 保存原始行为
    originalLog.apply(console, arguments);
    
    // 将日志添加到悬浮窗
    var logText = "";
    for (var i = 0; i < arguments.length; i++) {
        if (i > 0) logText += " ";
        logText += JSON.stringify(arguments[i]);
    }
    
    // 更新悬浮窗内容
    if (logWindow.logText) {
        // 限制最多显示100行
        var lines = logWindow.logText.getText().split("\n");
        if (lines.length > 100) {
            lines = lines.slice(lines.length - 100);
        }
        logWindow.logText.setText(lines.join("\n") + "\n" + logText);
        // 滚动到底部
        logWindow.logText.scrollBy(0, 10000);
    }
};

// 4. 添加按钮事件
logWindow.clearBtn.click(function() {
    logWindow.logText.setText("");
});

logWindow.closeBtn.click(function() {
    logWindow.close();
    // 可选:恢复原始console.log
    // console.log = originalLog;
});

// 5. 显示悬浮窗
logWindow.setPosition(0, 0);
logWindow.exitOnClose(); // 关闭悬浮窗时退出脚本

// 6. 测试日志
console.log("自定义悬浮窗日志系统已启动");
console.log("当前时间:", new Date());
console.log("设备信息:", {
    width: device.width,
    height: device.height,
    model: device.model
});

注意事项:

  1. 悬浮窗权限:确保已获取悬浮窗权限,可以在脚本开头添加:

    if (!floaty.checkPermission()) {
        floaty.requestPermission();
        toast("请授予悬浮窗权限");
        exit();
    }
    
  2. 日志滚动:示例中使用了scrollable="vertical"属性和scrollBy方法确保新日志能滚动到可见区域

  3. 日志限制:代码中限制了最多显示100行,避免内存问题,你可以根据需要调整

  4. 兼容性:使用了floaty.window创建悬浮窗,适用于所有支持Hamibot的Android设备

  5. 多窗口处理:如果需要同时显示多个悬浮窗,可以创建多个window对象

如果你想同时保留系统控制台输出,不要注释originalLog.apply(console, arguments)这行代码;如果只想在悬浮窗显示,可以注释掉这行。

当不再需要自定义日志悬浮窗时,可以调用logWindow.close()关闭悬浮窗,并通过console.log = originalLog恢复原始的console.log功能。

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