我必须减少一个计数器当写一个字符,但我的代码正在减少两个字符而不是一个但只有当按下删除键时,但是如果 如果我按另一个键不起作用
private Button send;
private TextView max;
private TextView msg;
int limit=140;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
max = (TextView) findViewById(R.id.max);
send = (Button) findViewById(R.id.send);
msg = (TextView) findViewById(R.id.msg);
msg.setOnKeyListener(this);
}
@Override
public void onClick(View view) {
}
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
max.setText(String.valueOf(limit--));
return false;
}
答案 0 :(得分:0)
问题是onKey被调用两次,一次是down,一次是up。 您可以使用其他方法,例如onKeyDown:
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
或者使用onKey使用过滤器。
答案 1 :(得分:0)
onKey
被解雇了两次。一旦按下按键,一次按下按键。
或者您可以尝试:
答案 2 :(得分:0)
Okey我找到了答案,
首先,msg不是TextView,是EditText
然后我们可以使用addTextChangeListener。
感谢所有回复的人
private Button send;
private TextView max;
private EditText msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
max = (TextView) findViewById(R.id.max);
send = (Button) findViewById(R.id.send);
msg = (EditText) findViewById(R.id.msg);
msg.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
max.setText(String.valueOf(140- (msg.getText().toString().length())));
if(msg.getText().toString().length()>=140){
send.setEnabled(false);
}else
send.setEnabled(true);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public void onClick(View view) {
}