// 创建对话框窗口
configDialog = floaty.window(dialogLayout);
// 使用计算后的位置
positions = calculateWindowPosition(); // 刷新位置计算
configDialog.setPosition(positions.dialog.x, positions.dialog.y);
// 获取控件引用
let confirmBtn = configDialog.findView("confirmBtn");
let cancelBtn = configDialog.findView("cancelBtn");
let changetimeSeekbar = configDialog.findView("changetimeSeekbar");
let tijiaotimeSeekbar = configDialog.findView("tijiaotimeSeekbar");
let tijiaotimeValue = configDialog.findView("tijiaotimeValue");
let changetimeValue = configDialog.findView("changetimeValue");
let keywordInput = configDialog.findView("keywordInput");
// 初始化UI
ui.run(() => {
changetimeSeekbar.setProgress(currentConfig.changetime);
tijiaotimeSeekbar.setProgress(currentConfig.tijiaotime);
keywordInput.setFocusable(true);
keywordInput.setFocusableInTouchMode(true);
// 设置滑动条监听
changetimeSeekbar.setOnSeekBarChangeListener({
onProgressChanged: (seekBar, progress, fromUser) => {
progress = Math.max(5, progress);
changetimeValue.setText(progress + "ms");
}
});
tijiaotimeSeekbar.setOnSeekBarChangeListener({
onProgressChanged: (seekBar, progress, fromUser) => {
progress = Math.max(5, progress);
tijiaotimeValue.setText(progress + "ms");
}
});
keywordInput.on("click", () => {
ui.run(() => {
try {
keywordInput.requestFocus();
// 使用 View.postDelayed 延迟执行(兼容性更好)
keywordInput.postDelayed(() => {
try {
let imm = context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(keywordInput, 0);
} catch (e) {
console.error("延迟弹出键盘失败:", e);
}
}, 100);
} catch (e) {
console.error("弹出键盘失败:", e);
toast("请手动点击输入框输入");
}
});
});
});
输入框无法弹出
回答
在Hamibot中使用floaty.window
创建的悬浮窗默认可能无法直接弹出软键盘,需确保以下几点:
-
XML布局配置
确保输入框的XML定义包含正确属性:<EditText android:id="@+id/keywordInput" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" android:inputType="text"/>
-
代码逻辑优化
修改点击事件处理逻辑,直接调用系统输入法:keywordInput.on("click", () => { ui.run(() => { try { keywordInput.requestFocus(); let imm = context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE); imm.showSoftInput(keywordInput, 0); } catch (e) { console.error("弹出键盘失败:", e); toast("请手动点击输入框输入"); } }); });
-
悬浮窗权限检查
确保脚本已申请并启用以下权限:FLOATY_PERMISSION
(悬浮窗权限)WRITE_SECURE_SETTINGS
(部分设备需此权限)
-
替代方案尝试
若仍无效,改用floaty.rawWindow
创建原始悬浮窗:var rawWindow = floaty.rawWindow( <frame> <edittext id="keywordInput"/> </frame> );
如果问题持续,可能是系统限制导致悬浮窗无法触发输入法,建议通过floaty.rawWindow
结合InputMethodManager
的底层调用尝试,或参考文档中floaty
模块的完整示例。
ℹ️ 本回答由 AI 生成,内容仅供参考