在我的应用程序中,我有一个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:对不起,我的英语