[英]Android Development: How To Use onKeyUp?
我是 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 。 我很快發現我的代碼被調用了兩次。 一次按下鍵,一次按下鍵。 我現在使用以下偵聽器並且只調用一次代碼。 "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;
}
};
我發現 Activity 中的每個控件都會自動調用onKeyUp()
。 如果這是你想要的,就像你添加onCreate()
一樣將它添加到 Activity
示例:
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);
}
});
如果您使用沒有觸摸但帶有硬鍵盤按鈕(鍵盤)的設備,請使用此代碼來控制向左向右向下移動的事件。 使用 onkeyDown 而不是 onKeyUp 因為 onKeyup 將返回下一個按鈕事件:
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;
}
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;
}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.