Android WebView的前进、后退、与刷新以及OnkeyDown事件 和 OnBackPressed方法注意点
2016-05-06 14:47
405 查看
关于webView再来一发,继续积累。
mWebView.goBack(); //后退
mWebView.goForward();//前进
mWebView.reload(); //刷新
一定要注意的地方:
实现的操作在webView.setOnKeyListener()中的onKey()方法,也可以再Activity的onKeyDown方法中(是onKeyDown方法中)
//点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法)
OnkeyDown事件 和 OnBackPressed方法注意点
在Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件。
1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规方法,直接重写Activity的onKeyDown方法即可,代码如下:
而对于Android 2.0开始又多出了一种新的方法,对于Activity
可以单独获取Back键的按下事件,直接重写onBackPressed方法即可,代码如下
同时还有一种情况,就是在以前开发的程序中使用的是onKeyDown方法,但是后续版本为了兼容OnBackPressed方法。就需要两者之间进行嵌套。具体的方法如下:
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事件。
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事件。
相关文章推荐
- Android之微信分享
- Android 自定义ScrollView ListView 体验各种纵向滑动的需求
- Android如何计算时间差
- Android开源项目分类汇总
- Cocos2d-x移植到安卓平台以及安卓模拟器配置
- Android View 事件分发机制 源码解析 (上)
- Android Dev Intro - Android Looper And Handler
- android开发Activity页面跳转时去除系统自带动画
- 学习Android Activity管理与控制
- Android 二维码 生成和识别(附Demo源码)
- 解决Error inflating class android.support.v7.widget.RecyclerView
- Android Dev Intro - Android Looper
- Android ORMLite 框架的入门用法
- Spring MVC获取ApplicationContext
- 移动端破解TLS加密的数据的设计思路
- Android 快速开发系列 ORMLite 框架最佳实践
- Android 二维码 生成和识别(附Demo源码)
- Android 序列化
- Android Dev Intro - Some Concepts
- 加速Android Studio/Gradle构建详解