Hmmmm ... onLongKeyPress()
dường như không hoạt động với KEYCODE_MENU
. Thật khó chịu.
Điều này dường như làm việc trên Nexus S (4.0.3) và Nexus One (2.3.6):
public class MenuKeyDetectorActivity extends Activity {
boolean wasLongPress=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
wasLongPress=wasLongPress | event.isLongPress();
}
return(false);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
Log.w("MKD", String.format("wasLongPress: %b", wasLongPress));
wasLongPress=false;
}
return(false);
}
}
Về cơ bản, lưu ý cho dù đó là một lâu báo chí hay không trong onKeyDown()
cuộc gọi của bạn, sau đó sử dụng thông tin đó trong onKeyUp()
để xác định bố cục cuối cùng.
Sử dụng gọi lại 'onPrepareOptionsMenu' là dự phòng của tôi nhưng tôi muốn xử lý thông qua các sự kiện chính. –