AutoJs6 icon indicating copy to clipboard operation
AutoJs6 copied to clipboard

悬浮窗中弹出菜单(PopupMenu.show())不显示

Open happyme531 opened this issue 2 years ago • 1 comments

如题: 想在点击一个悬浮窗中的按钮时弹出菜单.
实现代码:

const EditorInfo = android.view.inputmethod.EditorInfo;
const selectorWindow = floaty.rawWindow(
    <frame id="board" w="*" h="*" gravity="center">
        <vertical w="{{ device.height / 2 }}px" height="{{ device.width - 160 }}px" bg="#ffffffff">
            <horizontal id="search" w="*" bg="#ffefefef">
                <input id="input" inputType="text" layout_weight="1" hint="输入关键词" textColorHint="#ffbbbbbb" imeOptions="actionDone" singleLine="true" focusable="true" focusableInTouchMode="true"></input>
                <text id="btnMore" padding="15" textSize="15dp" textColor="#ff0f9086">更多</text>
                <text id="btnClose" padding="15" textSize="15dp" textColor="#ff0f9086">关闭</text>
            </horizontal>
        </vertical>
    </frame>
);

ui.run(() => {
    selectorWindow.setSize(-1, -1);
    selectorWindow.btnMore.click(function (view) {
        //展开一个下拉菜单: [清除搜索] [导入文件]
        const PopupMenu = android.widget.PopupMenu;
        const popupMenu = new PopupMenu(context, view);
        console.log(view instanceof android.view.View);
        const menu = popupMenu.getMenu();
        menu.add("清除搜索");
        menu.add("导入文件");
        popupMenu.show();
    });
});

setInterval(() => {
    
}, 100);

运行结果: 悬浮窗可以正常显示, 但点击"更多"时没有弹出菜单. Logcat没有报错消息.

ui模式下是正常的:

"ui";

const EditorInfo = android.view.inputmethod.EditorInfo;
ui.layout(
    <frame id="board" w="*" h="*" gravity="center">
        <vertical w="{{ device.height / 2 }}px" height="{{ device.width - 160 }}px" bg="#ffffffff">
            <horizontal id="search" w="*" bg="#ffefefef">
                <input id="input" inputType="text" layout_weight="1" hint="输入关键词" textColorHint="#ffbbbbbb" imeOptions="actionDone" singleLine="true" focusable="true" focusableInTouchMode="true"></input>
                <text id="btnMore" padding="15" textSize="15dp" textColor="#ff0f9086">更多</text>
                <text id="btnClose" padding="15" textSize="15dp" textColor="#ff0f9086">关闭</text>
            </horizontal>
        </vertical>
    </frame>
);

ui.run(() => {
    ui.btnMore.click(function (view) {
        //展开一个下拉菜单: [清除搜索] [导入文件]
        const PopupMenu = android.widget.PopupMenu;
        const popupMenu = new PopupMenu(context, view);
        console.log(view instanceof android.view.View);
        const menu = popupMenu.getMenu();
        menu.add("清除搜索");
        menu.add("导入文件");
        popupMenu.show();
    });
});

setInterval(() => {
    
}, 100);

可以正常弹出菜单.

请问这是Android的限制还是Autojs6的Bug, 亦或是代码存在问题?

(在AutoX.js中运行时结果相同)

happyme531 avatar Sep 21 '23 16:09 happyme531

我使用了下述代码, 没有发现问题, 你可以在 6.4.1 (稍后发布) 上面试试.

const EditorInfo = android.view.inputmethod.EditorInfo;
const selectorWindow = floaty.rawWindow(
    <frame id="board" w="*" h="*" gravity="center">
        <vertical w="{{ device.width }}px" height="{{ device.width - 160 }}px" bg="#ffffffff">
            <horizontal id="search" w="*" bg="#ffefefef">
                <input id="input" inputType="text" layout_weight="1" hint="输入关键词" textColorHint="#ffbbbbbb" imeOptions="actionDone" singleLine="true" focusable="true" focusableInTouchMode="true"></input>
                <text id="btnMore" padding="15" textSize="15dp" textColor="#ff0f9086">更多</text>
                <text id="btnClose" padding="15" textSize="15dp" textColor="#ff0f9086">关闭</text>
            </horizontal>
        </vertical>
    </frame>
);

ui.run(() => {
    selectorWindow.setSize(-1, -2);
    selectorWindow.btnMore.click(function (view) {
        //展开一个下拉菜单: [清除搜索] [导入文件]
        const PopupMenu = android.widget.PopupMenu;
        const popupMenu = new PopupMenu(context, view);
        console.log(view instanceof android.view.View);
        const menu = popupMenu.getMenu();
        menu.add("清除搜索");
        menu.add("导入文件");
        popupMenu.show();
    });
    selectorWindow.btnClose.click(function (view) {
        exit();
    });
});

setInterval(() => {}, 1e3);

SuperMonster003 avatar Nov 01 '23 12:11 SuperMonster003