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

您可以通过在屏幕上提供“菜单”来做到这一点。当用户选择该选项时,请执行以下操作。

  • 允许用户触摸屏,这是他想要放置文本的地方
  • 然后创建一个“自定义对话框”,根据需要从用户那里获取输入。
  • 将这些文本返回到您的屏幕并在用户触摸的位置写入文本。

第二种方法是通过以下代码查看软键盘。

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

这里,relRelativeLayout。您可以在这里传递任何视图。

于 2013-03-28T14:04:18.130 回答