如何在Android上的画布上显示软键盘并在其上书写

3

我想在安卓设备上使用软键盘在画布上写字。

我的问题是如何显示软键盘并处理它在画布上产生的事件。 我的代码如下:

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;
            }
        }
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。你可以在这里传递任何视图。


rel.getWindowToken() 是什么? - support_ms
@support_ms,嗨,我编辑了我的回答。请检查一下。 :) - Chintan Rathod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接