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