美文网首页程序员
WebView根据内容高度做折叠效果

WebView根据内容高度做折叠效果

作者: 你的益达233 | 来源:发表于2020-09-24 11:32 被阅读0次

    需求:webview内容超过400就显示点击展开,点击收起功能
    关键代码:

    rich_desc_web?.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                // 使用当前WebView处理跳转
                view.loadUrl(url)
                // true表示此事件在此处被处理,不需要再广播
                return true
            }
    
            override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
                super.onReceivedError(view, request, error)
    
            }
    
            override fun onPageFinished(view: WebView, url: String) {
                super.onPageFinished(view, url)
                LogUtil.i("onPageFinished","onPageFinished")
                
                Handler().postDelayed(Runnable { //int contentHeight = view.getContentHeight();
                    val viewHeight = view.height
                    LogUtil.i("onPageFinished",viewHeight.toString()+"\t")
                    richHeight = viewHeight
                    if (richHeight > 400){
                        setRichHeight(400)
                        tv_rich_show_all?.visibility = View.VISIBLE
                    } else {
                        setRichHeight(richHeight)
                    }
                    LogUtil.i("onPageFinished","onPageFinished1")
                    
                }, 500)
            }
        })
    

    onPageFinished页面加载完,加下延迟确保拿到webview真实高度。注意其他富文本控件获取可能为0,请使用webview控件。

    点击展开控件代码:

    tv_rich_show_all?.setOnClickListener {
            if (tv_rich_show_all?.text.toString() == "点击展开"){
                setRichHeight(richHeight)
                tv_rich_show_all?.text = "点击收起"
                tv_rich_show_all?.setCompoundDrawablesWithIntrinsicBounds(null,null,resources.getDrawable(R.mipmap.icon_celebrity_close),null)
            } else {
                setRichHeight(400)
                tv_rich_show_all?.text = "点击展开"
                tv_rich_show_all?.setCompoundDrawablesWithIntrinsicBounds(null,null,resources.getDrawable(R.mipmap.icon_celebrity_open),null)
            }
        }
    
    private fun setRichHeight(height:Int){
        //至于是否是LinearLayout.LayoutParams看你WebView外层控件是什么
        val richParams =  LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,height)
        richParams.leftMargin = UtilHelper.dip2px(mActivity,10f)
        richParams.rightMargin = UtilHelper.dip2px(mActivity,10f)
        rich_desc_web?.layoutParams = richParams
    }
    

    关键:在onPageFinished获取WebView高度处理逻辑

    题外话:如果不想看到刚进去折叠的过程,可在WebView上面加多一层加载的loading布局,等WebView折叠完,再隐藏loading布局即可。
    解决问题的请点个赞

    相关文章

      网友评论

        本文标题:WebView根据内容高度做折叠效果

        本文链接:https://www.haomeiwen.com/subject/yryzyktx.html