聊天头会弹出编辑文本。但是在里面点击时键盘不会出现

Chat head kind of pop up with edit text. But key pad not coming up when clicked inside

我已经使用服务为我的应用程序实现了聊天头类型的弹出。我在其中使用了编辑文本。

但问题是,当我单击编辑文本时,只有光标可见,而键盘没有出现。甚至无法 select 或复制粘贴该编辑文本中的文本。有什么帮助吗?谢谢

我找到了解决问题的方法。

我之前使用了以下代码:-

全局变量:-

private WindowManager mWindowManager;
WindowManager.LayoutParams params;

然后在Service的onCreate

mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);


    //Add the view to the window.
    params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

问题出在 FLAG_NOT_FOCUSABLE,请改用 FLAG_NOT_TOUCH_MODAL

但现在问题又来了,虽然我可以使用 floatingView 获取键盘,但其他应用程序无法使用键盘,甚至后退按钮也停止工作。

因此,为了解决这个问题,我使用了浮动按钮 UI,它在启用浮动键盘 UI 和禁用浮动键盘之间切换,以便后退按钮和键盘适用于其他应用程序。

我使用了以下代码:-

private void enableKeyPadInput(Boolean enable) {
    mWindowManager.removeViewImmediate(mFloatingView);

    if (enable) {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                PixelFormat.TRANSLUCENT);
    } else {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);
    }

    mWindowManager.addView(mFloatingView, params);
}

如果将 true 传递给此方法,则键盘开始工作。如果传递 false 则其他应用程序开始工作。

这是我解决问题的方法。还有比这更好的方法吗?

感谢@Narendra Jadon

这可能更好

private void enableKeyPadInput(Boolean enable) {
        //mWindowManager.removeView(mFloatingView);


        if (enable) {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                    PixelFormat.TRANSLUCENT);

        } else {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                    PixelFormat.TRANSLUCENT);
        }

        mWindowManager.updateViewLayout(mFloatingView,params);

        //mWindowManager.addView(mFloatingView, params);
    }