关于那个问题 and 那个问题如果您使用 onKeyDown 和 onKeyLongPress 则需要使用event.startTracking();
在 onKeyDown 里面。但我使用 WebView。
怎么做才能加入onKeyDown和onKeyPress,同时又不失去WebView的后退功能?
我需要这种行为:
在网页视图内,
* 当用户按下后退按钮时,webview将返回历史记录
* 当用户长按返回键时,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);
}
您需要覆盖onBackPressed()
方法而不是onKeyDown()
,这是从调用onKeyUp()
post-Eclair 除非目标 SDK 设置为低于 Eclair。返回true
from onKeyLongPress()
将导致活动被取消,并且onBackPressed()
不会被调用。
@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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)