Android - 键盘没有出现在浮动窗口中

时间:2013-05-15 18:29:59

标签: java android keyboard android-edittext

我正在编写一个应用程序,它使用以下代码在屏幕上通过运行的应用程序绘制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);

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

但是,虽然这被称为,从logcat看,没有任何反应。到目前为止,我发现显示键盘的唯一方法是使用:

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

但是这似乎是在屏幕上输入而不是在edittext中输入。 当编辑文本显示时,我也尝试了明确的焦点,但无济于事。

我猜这个问题是因为我正在使用一个“浮动窗口”但是必须有一种方法可以让这项工作成为诸如浮动计算器之类的应用程序存在于Playstore中以获取输入。任何人都有任何想法?我很难过:(

4 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:4)

使用 WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

a=[9 9 9 10 13 13 14 15 ] 
[~,~,idx] = unique(a)

有关详情和示例,请点击链接:https://github.com/atifmahmood29/overlays-floating-window-like-facebook-messenger

答案 2 :(得分:0)

我通过使用 FLAG_NOT_FOCUSABLE

解决了此问题

答案 3 :(得分:-2)

编程方式:

editText.requestFocus();

或通过XML:

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