存在webview时Android onKeyLongPress
关于以及如果使用onKeyDown和onKeyLongPress,则需要使用存在webview时Android onKeyLongPress,android,webview,onkeydown,Android,Webview,Onkeydown,关于以及如果使用onKeyDown和onKeyLongPress,则需要使用event.startTracking()内部onKeyDown。但是我使用网络视图 如何在不丢失WebView的back功能的情况下加入onKeyDown和onKeyPress? 我需要这种行为: 在webview内部, *当用户按下后退按钮时,webview将返回历史记录 *当用户长按back键时,将调用finish() public boolean onKeyDown(int keyCode, KeyEvent e
event.startTracking()代码>内部onKeyDown。但是我使用网络视图
如何在不丢失WebView的back功能的情况下加入onKeyDown和onKeyPress?
我需要这种行为:
在webview内部,
*当用户按下后退按钮时,webview将返回历史记录
*当用户长按back键时,将调用finish()
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK)
{
finish();
return true;
}
return super.onKeyLongPress(keyCode, event);
}
看看答案
基本上,您可以在onTouchEvent
中使用处理程序来检测长按
希望有帮助 您需要覆盖onBackPressed()
方法,而不是onKeyDown()
,该方法是从onkeydup()
post-Eclair调用的,除非目标SDK设置为低于Eclair。从onKeyLongPress()
返回true
将导致取消事件,并且不会调用onbackpress()
@Override
public void onBackPressed() {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled() {
super.onBackPressed();
return true;
}
return false;
}
Edit:实际上,您应该替代onKeyUp()
方法来提供相同的体验,并在onKeyLongPress()调用上设置一个标志,以检查它是否已被长时间按下:
private boolean isBackKeyLongPressed;
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
if (!isBackKeyLongPressed && mWebView.canGoBack()) {
mWebView.goBack();
} else {
onBackPressed();
}
isBackKeyLongPressed = false;
return true;
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
isBackKeyLongPressed = false;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && !event.isCanceled()) {
isBackKeyLongPressed = true;
}
return false;
}
我试过了。我添加了mySuperWebView.setOnTouchListener(新视图.OnTouchListener(){
。此侦听器捕获MotionEvent.ACTION\u DOWN
,MotionEvent.ACTION\u MOVE
等。但它不捕获使用MotionEvent.button\u back
的后退按钮。因此不起作用。@Transte:您是否覆盖了onKeyLongPress()
如我的编辑所示?@trante:你能确认你的清单中的targetSdkVersion
设置为5或更高。否则应该调用onKeyLongPress()
方法。它在Galaxy S2设备上对我有效。我检查了你上次编辑的版本。效果很好。谢谢。