我的应用程序允许用户更改某些硬键的功能。他们可以选择每个键在应用首选项中执行的操作,然后在onKeyDown上触发用户选择的操作。
我注意到许多测试此功能的人,首先设置一个硬键来执行某些操作,并立即按下键以确认更改是否生效。但是现在,onKeyDown只在我的MainActivity上,他们没有得到正确的反馈。
出于这个原因,我想在我的MainActivity和PreferenceActivity中重用onKeyDown。我尝试扩展BaseActivity,但这对于PreferenceActivity和常规活动都不起作用。有没有办法通过无遗传来做到这一点?我该怎么办?
答案 0 :(得分:0)
您可能无法通过继承执行此操作,因为PreferenceActivity继承自Activity,因此您无论如何都必须编写2个类(这会破坏目的)。
您也可以使用将keydown事件转换为用户已设置的事件的映射。
public class DownKeyMapper {
private static Map<Integer, Integer> mKeyCodeMap;
public static void init(Map<Integer, Integer> pKeyMap) {
// init here with your mappings from preferences
mKeyCodeMap = pKeyMap;
}
public static void mapKey(int pFromKeyCode, int pToKeyCode) {
mKeyCodeMap.put(pFromKeyCode, pToKeyCode);
}
public static int getMappedKey(int pKeyCode) {
if (mKeyCodeMap.containsKey(pKeyCode)) {
return mKeyCodeMap.get(mKeyCodeMap);
} else {
return pKeyCode;
}
}
}
所以在你的onKeyDown中你会使用:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
keyCode = DownKeyMapper.getMappedKey(keyCode);
return super.onKeyDown(keyCode, event);
}
希望这有帮助!