14

次のコードを使用して、実行中のアプリケーションの画面に編集テキストを描画するアプリケーションを作成しています。

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

しかし、それは編集テキストではなく画面に入力しているようです。また、編集テキストが表示されているときに明確なフォーカスを試みましたが、役に立ちませんでした。

問題は「フローティングウィンドウ」を使用しているためだと思いますが、入力を受け取るプレイストアにフローティング電卓などのアプリが存在するため、これを機能させる方法が必要です..誰かアイデアはありますか? 私は困惑しています:(

4

4 に答える 4

20

私の悪い.. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE を削除すると、正常に動作することに気付きました..ばかげた間違い

于 2013-05-18T12:33:08.870 に答える
8

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

于 2016-10-27T10:29:52.077 に答える
-2

プログラム的に:

editText.requestFocus();

または XML を介して:

<EditText...>
    <requestFocus />
</EditText>
于 2013-05-15T18:35:12.680 に答える