【问题标题】:How can I attach key event from Android soft keyboard without EditText?如何在没有 EditText 的情况下从 Android 软键盘附加键事件?
【发布时间】:2017-10-21 16:10:03
【问题描述】:

我想在没有 EditText 的情况下从软键盘附加按键事件。 我已经覆盖了一些方法。但不行。

这是我打开软键盘的代码。

public class MyActivity extends Activity {

  public void OpenKeyboard() {
    InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    keyboard.toggleSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.SHOW_FORCED, 0);
  }

  @Override
  public boolean dispatchKeyEvent(KeyEvent e) {
    if(e.getAction() == KeyEvent.ACTION_DOWN)
      Log.d("displatch", "clicked.."); // NOT-WORKING..

    return super.dispatchKeyEvent(e);
  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(event.getAction() == KeyEvent.ACTION_DOWN)
      Log.d("onKeyDown", "clicked.."); // NOT-WORKING..

    return super.onKeyDown(keyCode, event);
  }
}

请找到解决方案。谢谢。

【问题讨论】:

    标签: android keyboard android-softkeyboard


    【解决方案1】:

    你可以实现 KeyEvent.Callback

    public class SomeActivity extends AppCompatActivity implements KeyEvent.Callback
    {
    //...
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_D:
                moveShip(MOVE_LEFT);
                return true;
            case KeyEvent.KEYCODE_F:
                moveShip(MOVE_RIGHT);
                return true;
            case KeyEvent.KEYCODE_J:
                fireMachineGun();
                return true;
            case KeyEvent.KEYCODE_K:
                fireMissile();
                return true;
            default:
                return super.onKeyUp(keyCode, event);
        }
    }
    }
    

    你可以在Handling Keyboard Actions阅读更多内容

    【讨论】:

    • 有什么方法可以追踪软键盘的事件吗?
    【解决方案2】:

    您必须将 onKeyListener 绑定到您的 editText。

    edttext.setOnKeyListener(new OnKeyListener() {           
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                        //do something here
                        return true;
                    }
                    return false;
                }
            });
    

    或者试试这个。

    edittext.setonKeyListener(this);
    

    【讨论】:

    • 我不想使用编辑文本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多