Android ViewPager, имеющий WebView, не показывает встроенное изображение со стилем

#android #android-webview #android-viewpager

#Android #android-webview #android-viewpager

Вопрос:

Я хочу показать html-файлы книги epub в webview с помощью ViewPager. Текстовые файлы отображаются правильно, но страницы с изображениями отображаются некорректно (изображения не отображаются). Изображения появятся только после нажатия кнопки увеличения. После этого, когда я нажимаю кнопку уменьшения масштаба, изображение исчезает. Я попытался загрузить XML-файл (test.xml ), который содержит изображение. В первый раз это не загружает изображение. Но после того, как я переключился на портрет и вернулся к ландшафту, он показал изображение.

Он работает нормально, когда я попробовал тот же файл в WebView без ViewPager.

test.xml

 ?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Cover</title>
        <style type="text/css" title="override_css">
            @page {padding: 0pt; margin:0pt}
            body { text-align: center; padding:0pt; margin: 0pt; }
            div { margin: 0pt; padding: 0pt; }
        </style>
    </head>
    <body>
        <div>
            <img src="cover1.jpg" alt="cover" style="height: 100%"/>
        </div>
    </body>
</html>
 

Когда я удалил свойство syle(), оно работает нормально. Это проблема с ViewPager?

Может ли кто-нибудь помочь мне решить эту проблему?

Ответ №1:

Я не знаю, что вызывает проблему, и вы должны попытаться выяснить, как этого избежать. Однако в качестве временного обходного пути вы можете попытаться добавить WebViewClient в свой WebView, который прослушивает onPageFinished ->, а затем перезагрузить страницу один раз. Что-то вроде (НЕ ПРОВЕРЕНО):

 webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished (WebView view, String url){
        // Called when the page is finished loading
        if(firstTime)
            webview.loadUrl(url); // ONLY call this the first time!!
    }
});