【发布时间】:2011-01-13 23:22:08
【问题描述】:
Android 文档描述了如何在 Activity 中禁用搜索搜索功能: 公共布尔 onSearchRequested() { 返回假; }
这适用于短按 Nexus One 上的搜索按钮。 但是,它不会禁用长按,它仍然会触发语音搜索。
如何禁用长按语音搜索?
谢谢...
【问题讨论】:
Android 文档描述了如何在 Activity 中禁用搜索搜索功能: 公共布尔 onSearchRequested() { 返回假; }
这适用于短按 Nexus One 上的搜索按钮。 但是,它不会禁用长按,它仍然会触发语音搜索。
如何禁用长按语音搜索?
谢谢...
【问题讨论】:
我将 Stan 的答案扩展为仅禁用长按事件。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH
&& (event.getFlags() & KeyEvent.FLAG_LONG_PRESS) == KeyEvent.FLAG_LONG_PRESS) {
return true;
}
return super.onKeyDown(keyCode, event);
}
【讨论】:
(flags & mask) 就足以满足&& 的要求——为什么在您最近(仍在等待)的编辑中需要(flags & mask) == mask? FLAG_LONG_PRESS 是多位掩码,其中一个或多个底层位可能被打开?
if (keyCode == KeyEvent.KEYCODE_SEARCH && (event.getFlags() & KeyEvent.FLAG_LONG_PRESS) == KeyEvent.FLAG_LONG_PRESS)
flags & MASK 是一个 int/long 并且 && 需要一个布尔值。但是,使用(flags & FLAG_FOO) != 0 可能更好,因为它更能抵抗拼写错误(您需要多长时间才能注意到(flags & FLAG_FOO) == FLAG_BAR 总是错误的?)。
&& 需要 bool。
这对用户来说似乎不是一件好事,但 onKeyDown 可用于禁用 Activity 中的点击和长按搜索,如下所示:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
}
return super.onKeyDown(keyCode, event);
}
【讨论】:
在 Android 2.0 中,您可以这样做:
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CALL) {
// todo your code here
return true;
}
return super.onKeyLongPress(keyCode, event);
}
【讨论】: