私は Android 開発に不慣れで、onKeyUp
リスナーの使用方法に関する適切なガイドが見つからないようです。
私のアプリでは、EditText
誰かがキーを押して離したときに大きな があり、そのEditText
中で正規表現を実行する関数を呼び出したいと考えていEditText
ます。
onKeyUp の使い方がわかりません。誰かが私に方法を教えてもらえますか?
非常に正しい方法は、TextWatcher クラスを使用することです。
EditText tv_filter = (EditText) findViewById(R.id.filter);
TextWatcher fieldValidatorTextWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (filterLongEnough()) {
populateList();
}
}
private boolean filterLongEnough() {
return tv_filter.getText().toString().trim().length() > 2;
}
};
tv_filter.addTextChangedListener(fieldValidatorTextWatcher);
修正:
しばらくの間、汎用のonKeyListenerを使用しました。コードが 2 回呼び出されていることがすぐにわかりました。キーダウンで 1 回、キーアップで 1 回。次のリスナーを使用して、コードを 1 回だけ呼び出します。
"if (event.getAction() == KeyEvent.ACTION_UP)"
が鍵です。
OnKeyListener keyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP) {
//do something here
}
return false;
}
};
onKeyUp()
アクティビティ内のすべてのコントロールに対して自動的に呼び出されることがわかりました。これが必要な場合は、追加するのと同じようにアクティビティに追加しますonCreate()
例:
public boolean onKeyUp(int keyCode, KeyEvent event) {
//do something here
return false;
};
これは古い質問であることは知っていますが、同じ問題を抱えている他の人に役立つかもしれません。
次のコードの使用を検討してください。
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
...
case KeyEvent.KEYCODE_J:
if (event.isShiftPressed()) {
fireLaser();
} else {
fireMachineGun();
}
return true;
case KeyEvent.KEYCODE_K:
if (event.isShiftPressed()) {
fireSeekingMissle();
} else {
fireMissile();
}
return true;
default:
return super.onKeyUp(keyCode, event);
} }
ここで最後に、super.onkeyUp メソッドを呼び出しました。ユーザーが有効なキーを押さない場合のイベントを処理します。
詳細については、次のリンクを検討してください。
のためだけにEditText
。それ自体で達成しsetOnClickListener()
ます。の必要はありませんonKeyUp()
。それはクリック/タッチイベントによって実行されるためです。右?これを行うだけです。
edittext_object.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//do what you need
}
}
これを私の頭から書きますが、次の行の中にあるはずです:
text.setKeyListener(new KeyListener() {
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent
return super.onKeyUp(keyCode, event);
}
});
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
actionLabel.setText("KEYCODE_BACK key pressed");
Toast.makeText(this, "Press again back for exit", Toast.LENGTH_SHORT).show();
counter++;
if (counter > 1) {
super.onBackPressed();
}
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
actionLabel.setText("VOLUME_UP key pressed");
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
actionLabel.setText("VOLUME_DOWN key pressed");
return true;
}
return super.onKeyDown(keyCode, event);
}
// catches the onKeyUp button event
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
actionLabel.setText("KEYCODE_BACK key released");
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
actionLabel.setText("VOLUME_UP key released");
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
actionLabel.setText("VOLUME_DOWN key released");
return true;
}
return super.onKeyDown(keyCode, event);
}
// works for API level 5 and lower
@Override
public void onBackPressed() {
actionLabel.setText("BACK key pressed");
super.onBackPressed();
}
// catches the long press button event (longer than 2 seconds)
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
Toast.makeText(this, "Pressed for a long time", Toast.LENGTH_SHORT).show();
return true;
}
// catches the on touch event on screen and shows the specific pixels
// touched
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
actionLabel.setText("Touch press on x: " + x + " y: " + y);
return true;
}}