Андроид - клавиатура не появляется в плавающем окне

Я пишу приложение, которое использует следующий код для рисования edittext на экране над запущенными приложениями:

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:

<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");
                }
            }
        });

но хотя это называется, Как видно из logcat, ничего не происходит. Единственный метод, который я нашел до сих пор, чтобы отобразить клавиатура использует:

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

но это, кажется, печатается на экране, а не в edittext. Я также попытался очистить фокус, когда отображается edittext, но безрезультатно.

Я предполагаю, что проблема в том, что я использую "плавающее окно", но должен быть способ сделать эту работу, поскольку приложения, такие как плавающие калькуляторы, существуют в playstore, которые принимают ввод.. У кого-нибудь есть идеи? Я в тупике :(

4 ответов


мой плохой.. Я понял, если я удалю ему.LayoutParams.FLAG_NOT_FOCUSABLE работает нормально.. глупая ошибка!--1-->


использовать 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

Я решил эту проблему с помощью FLAG_NOT_FOCUSABLE


программно:

editText.requestFocus();

или через XML:

<EditText...>
    <requestFocus />
</EditText>