В моем приложении есть 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: простите за мой английский