在 Chrome 操作系统上覆盖 enter 和 space 键
Override enter and space keys on Chromeos
首先,这不是一个重复的问题:How to override Android keyboard
我的问题和上面的有点不同
我正在我的应用程序的后台播放音乐,如果用户按下任何片段上的 Enter
或 Space
键或 [=42],我想 play/pause 它=](我只有 1 个 activity)和一个 Chromebook's keyboard
。我已经实现了这个并且它工作得很好。但有一个问题:当用户将注意力集中在按钮上时(例如:打开 X 片段),Space
或 Enter
键会触发按钮的点击事件。所以我想覆盖这个。
这是我尝试过的方法:
主要Activity
public class MainActivity extends AppCompatActivity {
....
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SPACE || keyCode == KeyEvent.KEYCODE_ENTER) {
BackingTrackFragment.newInstance().onKeyUp(keyCode, event);
return true;
}
return super.onKeyUp(keyCode, event);
}
}
我的片段
public class SomeFragment extends BaseFragment implements KeyboardKeyEventListener {
...
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// play/pause the song
return true;
}
}
界面
public interface KeyboardKeyEventListener {
boolean onKeyUp(int keyCode, KeyEvent event);
}
重载 dispatchKeyEvent
解决了问题。它将阻止任何和所有关键事件。
主要Activity
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE) {
if (event.getAction() == KeyEvent.ACTION_UP) {
SomeFragment.newInstance().dispatchKeyEvent(event);
return false;
}
}
return super.dispatchKeyEvent(event);
}
我的片段
public class SomeFragment extends BaseFragment implements KeyboardKeyEventListener {
...
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// play/pause the song
return true;
}
}
重载接口
public interface KeyboardKeyEventListener {
boolean dispatchKeyEvent(KeyEvent event);
}
首先,这不是一个重复的问题:How to override Android keyboard
我的问题和上面的有点不同
我正在我的应用程序的后台播放音乐,如果用户按下任何片段上的 Enter
或 Space
键或 [=42],我想 play/pause 它=](我只有 1 个 activity)和一个 Chromebook's keyboard
。我已经实现了这个并且它工作得很好。但有一个问题:当用户将注意力集中在按钮上时(例如:打开 X 片段),Space
或 Enter
键会触发按钮的点击事件。所以我想覆盖这个。
这是我尝试过的方法:
主要Activity
public class MainActivity extends AppCompatActivity {
....
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SPACE || keyCode == KeyEvent.KEYCODE_ENTER) {
BackingTrackFragment.newInstance().onKeyUp(keyCode, event);
return true;
}
return super.onKeyUp(keyCode, event);
}
}
我的片段
public class SomeFragment extends BaseFragment implements KeyboardKeyEventListener {
...
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// play/pause the song
return true;
}
}
界面
public interface KeyboardKeyEventListener {
boolean onKeyUp(int keyCode, KeyEvent event);
}
重载 dispatchKeyEvent
解决了问题。它将阻止任何和所有关键事件。
主要Activity
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE) {
if (event.getAction() == KeyEvent.ACTION_UP) {
SomeFragment.newInstance().dispatchKeyEvent(event);
return false;
}
}
return super.dispatchKeyEvent(event);
}
我的片段
public class SomeFragment extends BaseFragment implements KeyboardKeyEventListener {
...
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// play/pause the song
return true;
}
}
重载接口
public interface KeyboardKeyEventListener {
boolean dispatchKeyEvent(KeyEvent event);
}