最近我将android支持库更新到版本22.1.0
compile 'com.android.support:support-v4:22.1.0'
compile 'com.android.support:appcompat-v7:22.1.0'
我重写了onKeyDown方法,发现更新库后没有调用它。如果我回到以前版本的库,它可以正常工作。
如果用户按下键,是否有任何其他方法可在新支持库版本中覆盖。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
答案 0 :(得分:1)
我找到了这个解决方案,它并不是最好的,但我认为这是唯一可行的解决方案。
在Activity的onCreate方法中添加以下行:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Field mDelegateField = AppCompatActivity.class.getDeclaredField("mDelegate");
mDelegateField.setAccessible(true);
Object mDelegate = mDelegateField.get(this);
Field mWindowField = mDelegate.getClass().getSuperclass().getSuperclass().getDeclaredField("mWindow");
mWindowField.setAccessible(true);
Window mWindow = (Window) mWindowField.get(mDelegate);
Window.Callback mOriginalWindowCallback = mWindow.getCallback();
mWindow.setCallback(new AppCompatWindowCallbackCustom(mOriginalWindowCallback));
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
在您的活动类中创建此类:
private class AppCompatWindowCallbackCustom extends WindowCallbackWrapper {
public AppCompatWindowCallbackCustom(Window.Callback wrapped) {
super(wrapped);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
final int keyCode = event.getKeyCode();
final int action = event.getAction();
if (keyCode == KeyEvent.KEYCODE_MENU && action == KeyEvent.ACTION_DOWN) {
// do your stuff
}
return super.dispatchKeyEvent(event);
}
}