如何在没有EditText的情况下从Android软键盘附加键事件?

时间:2017-05-22 05:48:07

标签: android keyboard android-softkeyboard

我想在没有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);
  }
}

请找到解决方案。 THX。

2 个答案:

答案 0 :(得分: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

中阅读更多内容

答案 1 :(得分:0)

您必须将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);