如何在没有 EditText 的情况下从 Android 软键盘附加按键事件?
How can I attach key event from Android soft keyboard without EditText?
我想在没有 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);
}
}
请找到解决方案。谢谢
您必须将 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);
你可以实施 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);
}
}
}
中阅读更多内容
我想在没有 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);
}
}
请找到解决方案。谢谢
您必须将 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);
你可以实施 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);
}
}
}
中阅读更多内容