android - PopupWindow,派发按键事件

标签 android window

如何将键事件从可聚焦的 PopupWindow 分派(dispatch)到基础 Activity。如果我设置 窗口可聚焦,它会消耗所有事件。我希望能够拦截一个 key ,并处理 事件。

这是我的困境: 我的 PopupWindow 包含一个 EditText,为了在窗口顶部显示键盘,我不得不将焦点设置在窗口上。由于焦点问题,我无法拦截关键事件(在本例中为菜单按钮)以关闭窗口。

最佳答案

您只能处理聚焦 View 的事件。

您可以尝试使用我的 CustomPopUp。

它的工作原理如下:如果您单击 EditText,输入一些内容,然后打开 CustomPopUp 并继续输入,您将输入 EditText。因此,即使您打开 CustomPopUp,之前的 View 也会聚焦。

public class CustomPopUp extends PopupWindow
{

    private final View.OnTouchListener customPopUpTouchListenr = new View.OnTouchListener()
    {

        @Override
        public boolean onTouch(final View v, final MotionEvent event)
        {

            return false;
        }
    };

    public CustomPopUp(final View theView)
    {
        super(theView);

        initView();

        setTouchInterceptor(customPopUpTouchListenr);

    }

    private void initView()
    {
        setWidth(LayoutParams.WRAP_CONTENT);
        setHeight(LayoutParams.WRAP_CONTENT);

        setTouchable(true);
        setOutsideTouchable(true);

        setBackgroundDrawable(new ColorDrawable());

    }

}

关于android - PopupWindow,派发按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515336/

相关文章:

android - Android 开机后启动了多少虚拟机?

console - Xcode 12 : How to get a full window console?

react-native - 在 native react 中向窗口添加 View

android - 等待线程会破坏线程的目的吗? Android 线程问题

android - 为什么 Android 存在特定于 Kotlin 的依赖项

android - 从 csv 填充 SQLite

C# WPF 窗口宽度、MaxWidth、MinWidth 被忽略

android - 从 View 内部访问 TextView

window - 关闭 SDL 窗口而不退出 SDL

c# - WPF 自定义 Chrome 窗口?