Android 在画布上使用编辑文本

Android 在画布上使用编辑文本,android,canvas,android-edittext,Android,Canvas,Android Edittext,我正在开发一个应用程序,需要在画布上绘制编辑文本。我能够做到这一点,但 我只能看到它,不能使用它。下面是我如何初始化EditText的 et = new EditText(MyActivity.this); et.setText("edittext"); et.setBackgroundColor(Color.GRAY); et.requestFocus(); //add it to a LinearLayout layout.addview(et); 我缺少什么使EditText实际可用 如

我正在开发一个应用程序,需要在画布上绘制编辑文本。我能够做到这一点,但
我只能看到它,不能使用它。下面是我如何初始化EditText的

et = new EditText(MyActivity.this);
et.setText("edittext");
et.setBackgroundColor(Color.GRAY);
et.requestFocus();
//add it to a LinearLayout
layout.addview(et);

我缺少什么使EditText实际可用

如下设置EditText输入类型:

ed.setInputType(2);
或者根据以下内容检查完整代码:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1f);


    textFieldsLayout = (LinearLayout) findViewById(R.id.LinearLayout1);

        final EditText ed = new EditText(this);

        ed.setInputType(2);

        ed.setLayoutParams(lparams);

        textFieldsLayout.addView(ed);       

这不是一个完美的解决方案。但我希望它能给你一些想法:)


您可以使用此代码,在
main
中添加此方法以获取输入键:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    cv = (CustomView) findViewById(R.id.custom_view);
    cv.dispatchKeyEvent(event);
    return super.dispatchKeyEvent(event);
}
在扩展视图类的类中:

@Override
protected void onDraw(Canvas canvas){
    super.onDraw(canvas);

    Paint p = new Paint();
    p.setTextSize(36);

    LinearLayout layout = new LinearLayout(this.getContext());

    EditText textView = new EditText(this.getContext());
    textView.setVisibility(View.VISIBLE);
    textView.setText(key);
    textView.setX(x);//get x from onTouch method
    textView.setY(y); // get y from onTouch method

    layout.addView(textView);

    layout.measure(canvas.getWidth(), canvas.getHeight());
    layout.layout(50,50, canvas.getWidth(), canvas.getHeight());
    layout.draw(canvas);
} 


 @Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int keyaction = event.getAction();

    if(keyaction == event.ACTION_DOWN)
    {
        int keyunicode = event.getUnicodeChar(event.getMetaState() );
        char character = (char) keyunicode;
        key += character;
        System.out.println("DEBUG MESSAGE KEY=" + character);
    }
    // you might add if (delete) 
    // https://stackoverflow.com/questions/7438612/how-to-remove-the-last-character-from-a-string
    // method to delete last character 
    invalidate();
    return super.dispatchKeyEvent(event);
}
您需要将文本存储在一个对象中,该对象包含
x,y,宽度,高度,字符串

onTouch
方法中,检查单击是否在同一文本中,然后将
newedittext>>设为false
,并将旧键设为要修改的键

@Override
protected void onDraw(Canvas canvas){
    super.onDraw(canvas);

    Paint p = new Paint();
    p.setTextSize(36);

    LinearLayout layout = new LinearLayout(this.getContext());

    EditText textView = new EditText(this.getContext());
    textView.setVisibility(View.VISIBLE);
    textView.setText(key);
    textView.setX(x);//get x from onTouch method
    textView.setY(y); // get y from onTouch method

    layout.addView(textView);

    layout.measure(canvas.getWidth(), canvas.getHeight());
    layout.layout(50,50, canvas.getWidth(), canvas.getHeight());
    layout.draw(canvas);
} 


 @Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int keyaction = event.getAction();

    if(keyaction == event.ACTION_DOWN)
    {
        int keyunicode = event.getUnicodeChar(event.getMetaState() );
        char character = (char) keyunicode;
        key += character;
        System.out.println("DEBUG MESSAGE KEY=" + character);
    }
    // you might add if (delete) 
    // https://stackoverflow.com/questions/7438612/how-to-remove-the-last-character-from-a-string
    // method to delete last character 
    invalidate();
    return super.dispatchKeyEvent(event);
}