[英]EditText Change Canvas drawText Android
我有一个活动(不是主要活动),该活动具有2个图形,一个edittext字段和一个按钮。
该按钮所要做的就是将用户返回到主要活动。
我希望能够在EditText字段更改时更改文本图形之一。 因此,只要用户在edittext字段中输入文本,图形文本就会立即更改为相同的文本。 目前,只有在我关闭键盘时它才会改变。
这是我的代码
public class ThirdActivity extends AppCompatActivity {
private DemoView demoview;
private EditText editText;
private String graphicText = "blank";
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
demoview = new DemoView(this);
Button button = (Button) findViewById(R.id.thirdActButton);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonPress();
}
});
editText = (EditText) findViewById(R.id.thirdActEditText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
if (!editText.getText().toString().equalsIgnoreCase("")){
graphicText = editText.getText().toString();
Log.d("MyApp",graphicText);
}
}
});
LinearLayout v = (LinearLayout) findViewById(R.id.linearlayout);
v.addView(demoview);
}
private class DemoView extends View{
public DemoView(Context context){
super(context);
}
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint = new Paint();
// draw some text using STROKE style
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeWidth(5);
paint.setColor(Color.BLUE);
paint.setTextSize(100);
canvas.drawText("Graphic", 75, 75, paint);
// draw some text using FILL style
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
paint.setTextSize(75);
canvas.drawText(graphicText, 150, 210, paint);
}
}
}
任何帮助将不胜感激。 谢谢
用onTextChanged()
而不是afterTextChanged()
编写代码, onTextChanged()
。 如果要在用户输入至少一个字符后更改图形,请使用onTextChanged()
。 如果要在用户提供任何输入之前更改图形,请使用beforeTextChanged()
。
相反,在添加代码的afterTextChanged
,将它添加onTextChanged
。 例如 -
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!editText.getText().toString().equalsIgnoreCase("")){
graphicText = editText.getText().toString();
Log.d("MyApp",graphicText);
}
}
由于上面的回答,这就是我使用的解决方案。
无论代码是在afterTextChanged()方法中还是在onTextChanged()中,它实际上都没有任何区别。 与众不同的是demoview.invalidate(); 这刷新了demoview
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!editText.getText().toString().equalsIgnoreCase("")){
graphicText = editText.getText().toString();
Log.d("MyApp",graphicText);
//refreshes the demoview so it will change instantly
demoview.invalidate();
}
}
谢谢您的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.