【发布时间】:2014-06-30 09:05:00
【问题描述】:
我正在开发一个 Android 项目,我需要检查何时按下空格键,以便我可以执行某个功能。
问题是,它在模拟器上运行,但在我的实际设备上却没有。我认为这可能是因为我的模拟器使用的是物理键盘,而不是屏幕上的虚拟键盘,但在实际设备上进行测试时,它使用的是虚拟键盘。
我正在尝试调度键事件
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE
&& event.getAction() == KeyEvent.ACTION_UP)
{
QueryEditor queryEditor = (QueryEditor)getSupportFragmentManager().findFragmentById(R.id.fragment_queryEditor);
queryEditor.formatQueryText();
return true;
}
}
我也试过按下 on 键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
disconnectDatabase();
}
else if (keyCode == KeyEvent.KEYCODE_DEL)
{
QueryEditor queryEditor = (QueryEditor)getSupportFragmentManager().findFragmentById(R.id.fragment_queryEditor);
queryEditor.formatQueryText();
}
return super.onKeyDown(keyCode, event);
}
除非按下后退按钮,否则这些都不会被触发,但我需要空格键来触发事件。
感谢您提供的任何帮助。
更新
下面是我如何创建 QueryEditor 片段和创建事件处理程序的代码
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
iQueryEditor = (IQueryEditor)this;
iErrorHandler = (IErrorHandler)this;
txtQueryEditor = (EditText)getActivity().findViewById(R.id.query_txtQueryEditor);
btnSubmitQuery = (ImageButton)getActivity().findViewById(R.id.query_btnPerformQuery);
btnClearQuery = (ImageButton)getActivity().findViewById(R.id.query_btnDeleteQuery);
txtQueryEditor.addTextChangedListener(new QueryTextChanged(getActivity(), txtQueryEditor, iQueryEditor));
setDatabaseUsed();
txtQueryEditor.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER))
|| actionId == EditorInfo.IME_ACTION_DONE)
{
executeQuery();
return true;
}
else if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE && event.getAction() == KeyEvent.ACTION_UP)
{
Toast.makeText(getActivity(), "Space Bar Pressed", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
btnSubmitQuery.setOnClickListener(mBtnSubmitQueryListener);
btnClearQuery.setOnClickListener(mBtnDeleteQueryListener);
}
txtQueryEditor 是我试图在其上接收空格键事件的 EditText。
【问题讨论】:
-
此问题中的信息及其接受的答案可能会有所帮助:stackoverflow.com/questions/5419766/…
-
你能写出如何激活软键盘按空格键吗?是 EditText 视图还是以编程方式完成?按空格键时焦点在哪里?
-
@Loop 它是由用户在弹出键盘的编辑文本内单击完成的,用户按下软空格键应该触发事件。
-
@Boardy 看看我的回答。我已经解释了关键事件是如何工作的,对于您的情况,代码示例的最后一部分将完成这项工作。只需按照我介绍的方式使用适当的侦听器即可。
标签: android