Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存在webview时Android onKeyLongPress_Android_Webview_Onkeydown - Fatal编程技术网

存在webview时Android 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

关于以及如果使用onKeyDown和onKeyLongPress,则需要使用
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设备上对我有效。我检查了你上次编辑的版本。效果很好。谢谢。