Android WebView的前进、后退、与刷新以及OnkeyDown事件 和 OnBackPressed方法注意点

本文介绍如何在Android应用中使用WebView组件进行页面前进、后退及刷新等操作,并探讨了如何通过覆写onKeyDown方法或使用onBackPressed方法来有效处理返回键事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于webView再来一发,继续积累。

mWebView.goBack();   //后退  
mWebView.goForward();//前进

mWebView.reload();  //刷新


一定要注意的地方: 

实现的操作在webView.setOnKeyListener()中的onKey()方法,也可以再Activity的onKeyDown方法中(是onKeyDown方法中)

//点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法)    

        webview.setOnKeyListener(new View.OnKeyListener() {    
            @Override    
            public boolean onKey(View v, int keyCode, KeyEvent event) {    
                if (event.getAction() == KeyEvent.ACTION_DOWN) {    
                    if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) {  //表示按返回键  
  
时的操作  
                        webview.goBack();   //后退    
  
                        //webview.goForward();//前进  
                        return true;    //已处理    
                    }    
                }    
                return false;    
            }    
        });  

OnkeyDown事件 和 OnBackPressed方法注意点


 在Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件。

  1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规方法,直接重写Activity的onKeyDown方法即可,代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复
       Toast.makeText(ml78.this,"返回键Back键测试",1).show();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

而对于 Android 2.0 开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed方法即可,代码如下

@Override
public void onBackPressed() {
// 这里处理逻辑代码,大家注意:该方法仅适用于2.0或更高版的sdk
return;
}

同时还有一种情况,就是在以前开发的程序中使用的是onKeyDown方法,但是后续版本为了兼容OnBackPressed方法。就需要两者之间进行嵌套。具体的方法如下:

 @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
   // 是否触发按键为back键
  if (keyCode == KeyEvent.KEYCODE_BACK) {
   onBackPressed();
   return true;
   } else {// 如果不是back键正常响应
   return super.onKeyDown(keyCode, event);
   }
  }
利用时间差方法完成两次返回键退出,防止误操作。

// 退出时间
    private long currentBackPressedTime = 0;
    // 退出间隔
    private static finalint BACK_PRESSED_INTERVAL = 2000;
     //重写onBackPressed()方法,继承自退出的方法
    @Override
    publicvoid onBackPressed() {
    // 判断时间间隔
    if (System.currentTimeMillis()- currentBackPressedTime > BACK_PRESSED_INTERVAL) {
        currentBackPressedTime = System.currentTimeMillis();
        Toast.makeText(this, "再按一次返回键退出程序", Toast.LENGTH_SHORT).show();
    } else {
        // 退出
        finish();
    }
}

  OnkeyDown事件 和OnkeyUp事件是不同事件。 OnBackPressed方法会处理返回键的操作,不会向上传播,如果你想向上传播 请使用OnkeyDown事件或OnkeyUp事件。


在这里可以看到Activity的方法中有onKeyDown()和onKeyUp()方法,下面是一个在学习是看到的例子:

"今天修了一个神奇的bug,在ActivitySecond中用了OnkeyDown事件监听了返回键事件,我return true 阻止了事件向上一级的ActivityFirst传播,可是发现ActivityFirst的OnkeyUp里面对返回键的监听的代码段还是执行了,搞了半天才发现一个是OnkeyDown事件 一个是OnkeyUp事件,这两个是不同的事件,ActivitySecond中没有阻止OnkeyUp事件向上传播,

不过中途,我将ActivitySecond中的OnkeyDown事件注销了,换成了 OnBackPressed方法 ,发现返回键的所有事件都不会向上传播了。"

总结: OnkeyDown事件 和OnkeyUp事件是不同事件。 OnBackPressed方法会处理返回键的操作,不会向上传播,如果你想向上传播 请使用OnkeyDown事件或OnkeyUp事件。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值