我正在尝试在Canvas
. 由于我需要显示软键盘来编写文本,我EditText
在我的 Activity 中添加了一个宽度为 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 上看到了很多帖子,其中使用了这种实现,我不知道为什么它在这里失败。
谢谢