Android Oreo WebView renders layout too small after 2nd loading

714 Views Asked by At

On some Android Oreo devices, when I load an url on webview for the first time, the URL page loads properly. However, when I load the URL again, the page is zoomed out. On devices lower than android oreo, the page loads properly for all devices.

Also, when you kill the app on the background and load again, the URL loads properly. On the second and succeeding tries, it shows the zoomed out version again. I attached the images of loaded URL below

Below is the correct loading of webpage on the webview Correct url webview photo

Below is the small display of webpage on webview webview Incorrect zoomed out url webview photo

Android XML Code:

<WebView
android:id="@+id/content_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

Java Code:

    private WebView mWebView;
    mWebView = (WebView) view.findViewById(R.id.content_view);
    mWebView.loadUrl("https://policies.google.com/");

URL: https://policies.google.com/

Take note that this happen in other URLs too. https://policies.google.com/ is just an example

It works on the following: Huawei nova 2i RNE-L22, Android 8.0.0

It DOES NOT work on the following Android 8.1.0; Pixel 2 Android 8.0.0; Samsung SM-G950FD Android 8.0.1; Huawei P20 EML-L29

Any suggestions or reasons as why this happens? How to fix this?

Thanks in advance.

2

There are 2 best solutions below

0
On BEST ANSWER

After asking google team about this issue, the said that it's probably some viewport layout settings. Webview has some unfortunate defaults due to legacy issues.,

Adding webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING); fixed the issue.

1
On

if you have problems related to zoom in webview

try to add zoom in and zoom out functions to your webview

you can add these lines to your java code, to implement zooming in and out

mWebView.loadUrl(url);
//code for zooming functions
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
//for javascript
webView.getSettings().setJavaScriptEnabled(true);