按下某个键时减少计数器(ANDROID)

时间:2015-11-29 18:33:56

标签: java android

我必须减少一个计数器当写一个字符,但我的代码正在减少两个字符而不是一个但只有当按下删除键时,但是如果 如果我按另一个键不起作用

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

3 个答案:

答案 0 :(得分:0)

问题是onKey被调用两次,一次是down,一次是up。 您可以使用其他方法,例如onKeyDown:

onKeyDown documentation

public boolean onKeyDown(int keyCode, KeyEvent event) {

    return super.onKeyDown(keyCode, event);

}

或者使用onKey使用过滤器。

答案 1 :(得分:0)

onKey被解雇了两次。一旦按下按键,一次按下按键。

或者您可以尝试:

  1. onKeyDown()
  2. onKeyUp()
  3. KeyEvent.getAction().
  4. enter image description here

    在这个java图像中,您可以看到该人同时发布了已发布和已按下的方法。这张图片是针对java的,但android的概念是一样的。使用我在这个编号列表中给你的方法。

    否则,现在,你正在听两件事。

    右键按下键,左键被释放:

    enter image description here

    如果这有用,请标记为最佳答案。如果您需要更多帮助,请告诉我们!

答案 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) {
}