java dispatchKeyShortcutEvent未在Chrome OS环境中调用

ergxz8rk  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(57)

我想实现一些代码来对常见的快捷键做出React,比如在Chrome操作系统环境中的Ctrl + S(保存),Ctrl + Z(撤销)。
我在Activity中添加了以下代码:

@Override
public boolean dispatchKeyShortcutEvent(KeyEvent event) {
  if (event.getKeyCode() == KeyEvent.KEYCODE_O) {
      openFile(); // Ctrl+O, Shift+O, Alt+O
      return true;
  } else if(event.getKeyCode() == KeyEvent.KEYCODE_Z) {
      if (event.isCtrlPressed()) {
              undoLastAction();
              return true;
      }
  }
  return super.dispatchKeyShortcutEvent(event);
}

我已经将Window.Callback添加到活动中:

public class ScMain extends AppCompatActivity implements View.OnClickListener,      
        FragmentManager.OnBackStackChangedListener, Window.Callback {

Android Studio将显示以下消息:

  • ComponentActivity.dispatchKeyShortcutEvent只能从相同的库组前缀中调用(引用groupId=androidx.core,前缀androidx来自groupId=[my app])*

尽管代码编译时没有错误,但dispatchKeyShortcutEvent方法永远不会被调用。
我找不到我应该在Gradle文件中添加哪个依赖项。或者我需要额外的代码吗?

x4shl7ld

x4shl7ld1#

我通过使用onKeyShortcut解决了这个问题

@Override
public boolean onKeyShortcut (int keyCode, KeyEvent event) {
    if (event.isCtrlPressed()) {
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_Z:
                UndoBtnFired(undoBtn);
                break;
            case KeyEvent.KEYCODE_S:
                saveToFile(null);
                break;
            case KEYCODE_L:
                clearDrawnLinks(mContext);
                break;
            default:
                break;
        }
    }

    return true;
}

相关问题