Android: почему я не могу программно прокрутить этот WebView? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть 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 s 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 } он не будет иметьэффект. ScrollX и scrollY моего WebView всегда равны 0.

У кого-нибудь есть подсказка, как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...