Android基础控件使用细节——WebView

在开发中经常会出现莫名其妙的问题,做个记录,方便以后汇总,该系列将不定期更新!


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());
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小山研磨代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值