私は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回です。次のリスナーを使用して、コードを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メソッドを呼び出しました。これは、ユーザーが有効なキーを押さなかったときにイベントを処理します。
詳細については、次の link を検討してください。
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);
}
});
タッチせずにハードキーパッドボタン(キーボード)を備えたデバイスを使用する場合は、このコードを使用して、左右に移動するイベントを制御します。 onKeyupは次のボタンイベントを返すため、onKeyUpではなくonkeyDownを使用します。
Button myButton = (Button) findViewById(R.id.my_btn);
myButton .setKeyListener(new KeyListener() {
@Override
public int getInputType() {
return 0;
}
@Override
public boolean onKeyDown(View view, Editable editable, int keyCode, KeyEvent keyEvent) {
Log.d("myTag", "onKeyDown code: " +keyCode);
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_RIGHT:
// USER_MOVE_RIGHT();
return true;
case KeyEvent.KEYCODE_DPAD_LEFT:
//USER_MOVE_LEFT());
return true;
case KeyEvent.KEYCODE_DPAD_DOWN:
//USER_MOVE_DOWN());
return true;
case KeyEvent.KEYCODE_DPAD_UP:
//USER_MOVE_UP();
return true;
case KeyEvent.KEYCODE_DPAD_CENTER:
//USER_Press_OK()
return true;
}
return false;
}