在开发中经常会出现莫名其妙的问题,做个记录,方便以后汇总,该系列将不定期更新!
WebView是android的一个组件,它的内核是基于开源WebKit引擎。如果我们对WebView进行一些美化、包装,可以非常轻松的开发出自己的浏览器。
1、禁止超链接的时候调用其他浏览器
今天调用网页显示控件,一组轮播图,根据服务器返回的URL连接做网页显示,同样的格式,有的可以正常在WebView中打开,有的会莫名其妙的弹出了浏览器选择框。很郁闷!
搜索了一下,找到解决方案,两步搞定,如下:
step1:首先是页面控件初始化部分
String url = getIntent().getStringExtra("url");
WebView webview = (WebView) findViewById(R.id.webView);
webview.loadUrl(url);
//如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。
//需要给WebView添加一个事件监听对象(WebViewClient),并重写shouldOverrideUrlLoading方法
webview.setWebViewClient(new MyWebViewClient());
step2:添加一个监听对象
private class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
};
}
2、滚动条设置
webview.setHorizontalScrollBarEnabled(true);//设置水平滚动条,true表示允许使用
webview.setVerticalScrollBarEnabled(false);//设置竖直滚动条 ,false表示禁止使用
3、禁止横竖屏切换的时候,重新加载网页
需要在AndroidManifest.xml中添加android:configChanges="keyboardHidden|orientation|screenSize"
4、开启Javascript支持
webview.getSettings().setJavaScriptEnabled(true);// 开启Javascript支持
5、设置可以自动加载图片
webview.getSettings().setLoadsImagesAutomatically(true);// 设置可以自动加载图片
6、webview点击返回键返回上一个html
6.1 直接监听页面返回键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);
}
6.2 可以为webview控件添加监听事件
mWebView.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 && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
}
return false;
}
});
6.3 如果页面有自己的返回按钮,在按钮的点击事件里面如下处理
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.backImg:// 返回按钮点击事件
if (mWebView.canGoBack()) {
mWebView.goBack();// 返回前一个页面
}else{
finish();
}
break;
default:
break;
}
}
7、调用goBack()后标题不改变,
一般是在WebChromeClient中:
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
titleTxt.setText(title);// 设置WebView标题回调
}
需要在自定义WebViewClient中作如下处理
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 调用goBack()后标题不改变
titleTxt.setText(view.getTitle());
}