android - Android:为什么我不能以编程方式滚动这个 WebView?
问题描述
我有一个不显示实际网站的 WebView,但会获取 HTML 格式的字符串来显示。我需要在按下按钮时将此 WebView 滚动到顶部。我知道 StackOverFlow 上有很多类似的问题,但没有一个对我有帮助 - 所以我假设我的问题是不同的。我对 HTML/CSS 了解不多,所以也许这就是错误的来源——不确定。
这是将内容输入我的 WebView 的代码:
fun wrapAndInflateHtml(webView: WebView, text: String) {
val html = wrapWithHtml(webView.context, text)
webView.loadData(html, "text/html", "UTF-8")
}
private fun wrapWithHtml(c: Context, htmlBody: String): String {
return "<html>" + wrapCss(getCss(c)) +
"<body>$htmlBody</body></html>"
}
private fun getCss(c: Context): String {
return c.getString(R.string.html_header)
}
private fun wrapCss(css: String): String {
return "<head><style>$css</style></head>"
}
这是标头的字符串资源:
<string name="html_header"><![CDATA[<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">
这是作为正文(wrapAndInflateHtml
'text
参数)提供的字符串的示例:
<string name="imprint_html"><![CDATA[<p>Some Company<br />
Some Street 1<br />
City<br />
</p>
<p>Some more text here<br />
And a number: 65560<br />
</p>
<p>Some Text here:<br /><br />
Some more text.
</p>
<p>Phone: <a href=\"123456789\">123456789</a><br /><br />
Some more text<br /><a href=\"mailto:email@server.com\">email@server.com</a>.</p>]]></string>
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/wv_imprint"
style="@style/CopySmall"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/margin_16" />
</LinearLayout>
和我的片段:
class HtmlViewerFragment : Fragment() {
lateinit var title: String
lateinit var html: String
lateinit var webView: WebView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
extractArguments()
return inflater.inflate(R.layout.fragment_html_viewer, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
webView = wv_imprint
wrapAndInflateHtml(wv_imprint, html)
}
private fun extractArguments() {
arguments?.getString("title").let {
title = it!!
}
arguments?.getString("html").let {
html = it!!
}
}
}
现在,如果我添加一个方法来像这样以编程方式滚动 WebView:
hypotheticalButton.setOnClickListener { webView.scrollTo(0,0 }
它将没有效果。我的 WebView 的 scrollX 和 scrollY 始终为 0。
有没有人提示我如何解决这个问题?
解决方案
推荐阅读
- node.js - Module '"../../parse5/lib"' has no exported member 'ElementLocation' - Angular Universal Firebase deployment error
- haskell - Application freezes on futex() call
- python - What is the name of Python's "vars()" function in vb.net?
- java - CloudFlare blocks download from JSoup
- visual-studio-code - Can't find missing VS Code 1.43 key bindings to replace cursor keys with h,j,k,l for the file explorer (most others included here)
- angular - Delete errors from one Form Field in Angular's Reactive Forms
- django - Django 查看错误:分配前引用的局部变量-> if 语句中的缺陷?
- java - Application behave different if i run it from Android stuido or i instal it using apk created by Android studio
- python - Random numbers for large populations
- python - 从python中的列表中删除具有某些值的字符串