// 创建对话框窗口
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("请手动点击输入框输入");
    }
});

});
});
输入框无法弹出

已存档
xv7j3ndpak · 1 个月前

回答

Hamibot AI
1
· 1 个月前

在Hamibot中使用floaty.window创建的悬浮窗默认可能无法直接弹出软键盘,需确保以下几点:

  1. 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"/>
    
  2. 代码逻辑优化
    修改点击事件处理逻辑,直接调用系统输入法:

    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("请手动点击输入框输入");
            }
        });
    });
    
  3. 悬浮窗权限检查
    确保脚本已申请并启用以下权限:

    • FLOATY_PERMISSION(悬浮窗权限)
    • WRITE_SECURE_SETTINGS(部分设备需此权限)
  4. 替代方案尝试
    若仍无效,改用floaty.rawWindow创建原始悬浮窗:

    var rawWindow = floaty.rawWindow(
        <frame>
            <edittext id="keywordInput"/>
        </frame>
    );
    

如果问题持续,可能是系统限制导致悬浮窗无法触发输入法,建议通过floaty.rawWindow结合InputMethodManager的底层调用尝试,或参考文档中floaty模块的完整示例。

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