Высота моего встроенного Sporcle отображается неправильно - PullRequest
0 голосов
/ 12 июня 2019

В моем приложении есть RecylcerView, в котором у меня есть разные типы ячеек: TextView, Image, WebView и т. Д. *

WebViews в основном встроенные, которые я загружаю с помощью HTML-тамплета.В моем списке я должен загрузить Embed Soundcloud и Sporcle, оба Webview.

У меня нет проблем с Soundcloud, но для Sporcle высота веб-просмотра не отображает весь контент Embed.

Я хочу отобразить все содержимое моего веб-просмотра.Я уже пытался изменить размер моего веб-просмотра, загрузив javascript в обратный вызов OnPageFinished.

В загружаемом html-шаблоне я настраиваю стиль своего iframe с width100% и Height100%, но ничего не работает.

Это шаблон, который я загружаю в свой webView. Я добавил PLaceHolder src = \ "% 1 $ s \", чтобы использовать URL встраивания:

<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 - это javascript, который я вызываю после завершения загрузки веб-просмотра, он позволяет мне восстановить высоту содержимого моего представления, но в моем случае эта высота все еще изменяется вразмер веб-просмотра.

Я должен восстановить фактическую высоту содержимого, за исключением того, что теперь я восстановил высоту, которая регулируется в соответствии с высотой моего веб-просмотра.Если мой веб-просмотр 500dp, javascript вернет высоту 490.

Кто может мне помочь, пожалуйста?!!

PS: простите за мой английский

...