にテキストを書き込もうとしていますCanvas
。テキストを書き込むためにソフト キーボードを表示する必要があるためEditText
、幅 0 の をアクティビティに追加しました。に入力されたテキストを取得する TextWatcher も実装しましたEditText
。このトリックを使用すると、次のコードでいつでもソフト キーボードを表示できます。
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(myEditText, InputMethodManager.SHOW_IMPLICIT);
このように、私はユーザーが何を書いているかを知り、私の中にテキストを書くことができますCanvas
.
さて...これは、ユーザーが書くのをやめたいとき(または、キャンバス内のテキストを確実に固定したいとき)にトリッキーになります。私が思ったのは、彼が「Enter」を押すことができるということです。そこで、重要なイベントをキャッチする方法を実装しようとしました。これまでのところ成功なし。
これが私の実際のコードです。このメソッドは、書き込みを開始したいときに呼び出されます。「編集」はEditText
.
public void handleUp(final Paint myPaint) {
edit.setFocusable(true);
edit.setFocusableInTouchMode(true);
edit.requestFocus();
edit.addTextChangedListener(new Watcher());
edit.setImeOptions(EditorInfo.IME_ACTION_GO);
edit.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
Log.d("MyApp", "key pressed");
Paint localPaint = new Paint();
mCanvas.drawText(edit.getText().toString(), mX, mY, localPaint);
return false;
}
});
edit.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.d("MyApp", "key pressed");
if (keyCode == KeyEvent.ACTION_DOWN) {
Paint localPaint = new Paint();
mCanvas.drawText(edit.getText().toString(), mX, mY, localPaint);
return true;
}
return false;
}
});
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT);
}
アプリをデバッグすると、設定したチェック ポイントに到達Log()
せず、ログにもメッセージが表示されません。この種の実装が使用されている StackOverFlow に関する多くの投稿を見てきましたが、ここで失敗する理由がわかりません。
ありがとうございました