android WebView 使用问题总结

本文总结了Android WebView在使用过程中遇到的问题及其解决方案,包括加载大图处理、硬件加速禁用、页面滚动问题、音频播放处理、网页元素交互及定位等。通过设置WebView属性、监听事件和JavaScript交互,实现更好的用户体验。

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

1.webview加载网页中图片过大,处理

    【1.在ondestroy()方法中释放资源
    private void destroyWebView(WebView webView){
        if( webView!=null) {

            // 如果先调用destroy()方法,则会命中if (isDestroyed()) return;这一行代码,需要先onDetachedFromWindow(),再
            // destory()
            ViewParent parent = webView.getParent();
            if (parent != null) {
                ((ViewGroup) parent).removeView(webView);
            }

            webView.stopLoading();
            // 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错
            webView.getSettings().setJavaScriptEnabled(false);
            webView.clearHistory();
            webView.clearView();
            webView.removeAllViews();
            webView.destroy();

        }

    }

    【2.在mainfest.xml中去掉页面的硬件加速。
    【3.在布局文件中将layerType去掉。


2.本地调用html代码。 
    //html代碼的js的路徑(路径是写死的)
    String jsUrl = Api.DOMAIN_API + "/js/app_html_show_img.js";
    mWebContent.loadDataWithBaseURL(jsUrl, content ,"text/html", "utf-8", null);


3.將html代码中的图片的适应(不超过屏幕),html代码中的链接不可点击。
    WebViewClient

     @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        imgReset(view);
    }


     @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //html中的链接禁止点击
        return true;
    }

    //图片适应
    private void imgReset(WebView webContent) {
        webContent.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName('img'); " +
                "for(var i=0;i<objs.length;i++)  " +
                "{"
                + "var img = objs[i];   " +
                " img.style.maxWidth = '100%';img.style.height='auto';" +
                "}" +
                "})()");
    }


4.WebView滑动到底部后自动又滑动顶部,需要在WebView中添加属性:
             android:focusable="false"
            android:focusableInTouchMode="false"

            或者:
            解决以上问题可以在Scrollview中所使用的LinearLayout添加如下属性:android:descendantFocusability="blocksDescendants"

 

5.在页面播放音频,退出Activity音频仍然播放:
    需要在onDestory()方法中调用webView.destroy();
    并且rootLayout.removeView(webView);  


6.WebView定位思路:
    
        //定位上一次位置
        webviewCommon.setOnScrollChangeListener(new VideoEnabledWebView.OnScrollChangeListener() {
            @Override
            public void onScrollChange(WebView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if (mTouch) {
                    mScrollY = webviewCommon.getScrollY();
                    mClick = false;
                }
            }
        });

        webviewCommon.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    mTouch = true;
                }
                return false;
            }
        });

        //点击评论按钮:
         case R.id.tv_comment:
                AnalysisArticleUtil.mobClickAgent(AnalysisKeys.ARTICLE_COMMENTICON_ICON);
                //回复数量按钮点击
                mTouch = false;
                if (!mClick) {
                    redirectAnchorPoint();
                    mClick = true;
                    return;
                }

                mClick = false;
                webviewCommon.scrollTo(0, mScrollY);
                break;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值