安卓 - 键盘未出现在浮动窗口中

2022-09-04 00:36:56

我正在编写一个应用程序,该应用程序使用以下代码在正在运行的应用程序上方的屏幕上绘制编辑文本:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                PixelFormat.TRANSLUCENT);

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

windowManager.addView(mEditText, params);

编辑文本的 xml 为:

<EditText
            android:id="@+id/mEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="3"
            android:inputType="textAutoComplete|text"
            android:focusable="true"
            android:focusableInTouchMode="true" />

但是,专注于此不会调出键盘。我还尝试过以编程方式使用onFocusListener来提升它:

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus) {
                    Log.d("", "Has focus");
                    ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
                } else {
                    Log.d("", "Lost focus");
                }
            }
        });

但是,尽管从日志中可以看出,这是所谓的,但没有任何反应。到目前为止,我发现显示键盘的唯一方法是使用:

getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0);

但这似乎在屏幕上键入,而不是在编辑文本中键入。我也尝试过在显示编辑文本时清晰可聚焦,但无济于事。

我猜问题是因为我使用的是“浮动窗口”,但必须有一种方法可以使这项工作,因为诸如浮动计算器之类的应用程序存在于Playstore上,可以接受输入。有人有什么想法吗?我被难住了:(


答案 1

我的坏..我意识到如果我删除WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE它工作正常。愚蠢的错误


答案 2

使用WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_PHONE,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                    PixelFormat.TRANSLUCENT);

有关更多详细信息和示例,请访问以下链接:https://github.com/atifmahmood29/overlays-floating-window-like-facebook-messenger


推荐