3

Androidのソフトキーボードでキャンバスに書き込もうとしています。

私の質問は、ソフト キーボードを表示し、キャンバス上で生成されるイベントを処理する方法です。私のコードは次のとおりです。

public class DrawView extends View {
            Paint paint = new Paint();
            private static final String LOGID = "MxView";
            String message = "No key pressed yet.";
            DrawView(Context context) {
                    super(context);
                    setFocusable(true);
            }

            @Override
            protected void onDraw(Canvas canvas) {

                    canvas.drawText(message, 5, 20, paint);

            }
            @Override
            public boolean onKeyDown(int keyCode, KeyEvent ev) {
                    switch(keyCode) {
                    case KeyEvent.KEYCODE_ENTER:
                            message = "Key is Enter!";
                            Log.i(LOGID, message);
                            break;
                    case KeyEvent.KEYCODE_E:
                            message = "Key is E!";
                            Log.i(LOGID, message);
                            break;
                    default:
                            return false;
                    }
                    invalidate();
                    return true;
            }
        }
4

1 に答える 1

2

画面に「メニュー」を提供することで、おそらくこれを行うことができます。ユーザーがそのオプションを選択すると、次のアクションを実行します。

  • ユーザーが画面にタッチできるようにします。これは、ユーザーがテキストを配置したい場所です
  • 次に、必要に応じてユーザーからの入力を受け取る「カスタム ダイアログ」を作成します。
  • それらのテキストを画面に戻し、ユーザーが触れた場所にテキストを書き込みます。

2 番目の方法は、次のコードでソフト キーボードを表示することです。

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);

これにより、ソフト キーボードが表示されます。キーボードから引数を取得するには、次のコードを使用します。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    Log.d("TEST", "Key Down  :" + keyCode + " String : " + s);
    s += (char) event.getUnicodeChar();

    return super.onKeyDown(keyCode, event);
}

ここで、「s」は押された値を格納する文字列オブジェクトです。

キーボードを非表示にするには、

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(rel.getWindowToken(), 0);

ここでは、relですRelativeLayout。ここでは任意のビューを渡すことができます。

于 2013-03-28T14:04:18.130 に答える