我的Embed Sporcle的高度显示不正确

时间:2019-06-12 12:17:09

标签: javascript android html kotlin embed

在我的应用程序中,我有一个RecylcerView,其中有不同的类型单元格:TextView,Image,WebView等...

WebViews主要是嵌入式的,我用html模板加载。 在我的列表中,我必须加载Embed Soundcloud和Sporcle,它们都是Webview。

我对Soundcloud没问题,但是对于Sporcle,Web视图的高度并不能显示Embed的所有内容。

我想显示我的webView的所有内容。 我已经尝试通过在OnPageFinished回调中加载JavaScript来调整Web视图的大小。

在我加载的html模板中,我将iframe的样式配置为width100%和Height100%,但是没有任何效果。

这是我在webView中加载的模板,我添加了一个PLaceHolder src = \“%1 $ s \”以使用嵌入的网址:

<string name="sporcle_html_template" translatable="false">
        <![CDATA[
            <html>
                <head>
                     <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=yes, shrink-to-fit=no\" />
                     <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />
                </head>
                <body>
                   <div class=\"content_iframe_video\">
                   <iframe style=\"position:relative; width:100%%; height:100%%; display:block;\"  src=\"%1$s\" frameborder=\"0\" allowfullscreen></iframe>
                   <script type="text/javascript" src="http://www.sporcle.com/embed/embed.js?v=5519e08a02ddf"></script>
                   </div>
                </body>
            </html>
        ]]>
 </string>

在这里我配置整个单元格:

class SporcleViewHolder(view: @NotNull View) :  AbstractStoryItemViewHolder<StoryHyperLinkItem>(view){

    override fun bind(activity: Activity, typeFaceProvider: TypeFaceProvider, item: StoryHyperLinkItem) {

       // (itemView as SporcleView).setUrl(activity, item.url, classicParagraphStoryAdapter)
        val htmlString = item.url
        val display = activity.windowManager.defaultDisplay
        val size = Point()
        display.getSize(size)

        val firstIndexUrl = htmlString.indexOf(HtmlUtils.HTML_URL)+ HtmlUtils.HTML_URL.length
        val lastIndexUrl = htmlString.indexOf(HtmlUtils.HTML_URL_END)
        val id = htmlString.substring(firstIndexUrl, lastIndexUrl)

        val html = activity.getString(R.string.sporcle_html_template, id)
        val sporcleView = itemView as WebView
        sporcleView.layoutParams = ViewUtils.getLayoutParams(activity)
       sporcleView.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
        sporcleView.settings.useWideViewPort = true
        sporcleView.settings.loadWithOverviewMode = true
        sporcleView.settings.javaScriptCanOpenWindowsAutomatically = true
        sporcleView.settings.domStorageEnabled = true
        sporcleView.addJavascriptInterface(WebAppInterface(activity, sporcleView), "AndroidFunction")
        sporcleView.webViewClient = object : WebViewClient(){

            override fun onPageFinished(view: WebView, url: String?) {
                view.loadUrl("javascript:AndroidFunction.resize(document.body.scrollHeight)")
                super.onPageFinished(view, url)
            }
        }
        sporcleView.settings.javaScriptEnabled = true
        sporcleView.loadDataWithBaseURL("https://www.sporcle.com", html,"text/html", StringUtils.UTF_8, null)
    }
}

class WebAppInterface(private val activity: Activity, private val view: WebView) {

    @JavascriptInterface
    fun resize(height : Float) {
                val webViewHeight = height * activity.getResources().getDisplayMetrics().density
                view.setLayoutParams(LinearLayout.LayoutParams(activity.getResources().getDisplayMetrics().widthPixels, (webViewHeight * activity.getResources().getDisplayMetrics().density).toInt()))
                view.invalidate()
                view.requestLayout()
                //  view.layoutParams.height = height.toInt()
    }
}

WebAppInterface是在Webview加载完成后调用的javascript,它允许我恢复视图内容的高度,但是在我的情况下,该高度仍然随Webview的大小而变化。

我应该恢复内容的实际高度,除了现在恢复根据WebView的高度调整的高度。如果我的webciew是500dp,则javascript将返回高度490。

谁能帮助我? !!

PS:对不起,我的英语

0 个答案:

没有答案