Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebView does not render css like the browser does?

As far as im aware, the WebView is the same thing as the built in browser? Right?

I am facing an issue where a page that contains some absolute positioned div elements all stack on top of eachother instead of finding their correct location, AND background-image gets completely ignored.

This said, in the browser on my phone (HTC Incredible S - 2.3.3, stock browser) renders it out correctly, and on top of this, applications that use an embedded webview that i can point it to the page, renders correctly. Which leads me to beleive that the webview I have in my application is bjorking somehow.

import android.app.Activity;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.*;

public class ShowWebView extends Activity {

    public WebView web;
    public String baseURL = "http://test.dev/";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webpage);

        web = (WebView) findViewById(R.id.webpage);
        home = (Button) findViewById(R.id.tool_Home);
        back = (ImageButton) findViewById(R.id.tool_Back);
        forward = (ImageButton) findViewById(R.id.tool_Forward);
        refresh = (ImageButton) findViewById(R.id.tool_Refresh);

        ajax = (ImageView) findViewById(R.id.test_anim);
        ajax.setBackgroundResource(R.drawable.ajax_animation);


        // Settings
        web.getSettings().setJavaScriptEnabled(true);
        web.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
        web.setWebViewClient(new WebViewClient());

        Bundle extras = getIntent().getExtras();
        if(extras != null) {

            String url = baseURL+extras.getString("page")+"?androidApplication"; // The Basics, page gets added to baseURL
            String id = "";
            String push = "false"; // false by default

            // If an ID exists, lets get it
            if(extras.getString("id") != null) {
                id = extras.getString("id");
            }

            if(extras.getString("push") != null) {
                push = extras.getString("push");
            }

            // Build the URL
            if(id != "") url = url + "&id="+id;
            if(push != "false")     url = url + "&pushVersion";

            web.loadUrl(url);
        } else {
            web.loadUrl("http://www.bing.com");
        }
}

also heres my webview xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    style="@style/MainPage"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/Header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >


        <ImageView
            android:id="@+id/ImageView01"
            android:layout_width="match_parent"
            android:layout_height="42sp"
            android:scaleType="fitXY"
            android:src="@drawable/top_header" />

    </LinearLayout>
    <LinearLayout
        android:id="@+id/SubHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >


        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="match_parent"
            android:layout_height="28sp"
            android:scaleType="fitXY"
            android:src="@drawable/top_sub_header" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >








        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:orientation="vertical" >

            <WebView
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/webpage"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                 />

        </LinearLayout>




        <LinearLayout
            android:id="@+id/toolBar"
            android:layout_width="match_parent"
            android:layout_height="40sp"
            android:layout_marginTop="2.5sp"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/tool_Home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Home" />


            <ImageButton
                android:id="@+id/tool_Back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/backward" />


            <ImageButton
                android:id="@+id/tool_Forward"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/forward" />


            <ImageButton
                android:id="@+id/tool_Refresh"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/refresh" />


            <ImageView
                android:id="@+id/test_anim"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_centerHorizontal="true" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

any help resolving this issue would be truly amazing!

like image 245
RedactedProfile Avatar asked Nov 25 '11 18:11

RedactedProfile


People also ask

How is WebView different from browser?

WebView is a feature that allows an application to display a webpage as a part of its own activity, instead of opening it on a separate browser. This not only allows the app to retain the users within itself but also improves the user-experience multifold.

How do I render HTML in WebView?

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml. In the above code, we have taken web view to show html content.

What can I use instead of WebView?

Alternatives to WebView If you want to send users to a mobile site, build a progressive web app (PWA). If you want to display third-party web content, send an intent to installed web browsers. If you want to avoid leaving your app to open the browser, or if you want to customize the browser's UI, use Custom Tabs.

Which browser is used in Android WebView?

Chrome, Google's ubiquitous browser, powers Android System WebView. The Android System WebView app is typically pre-installed on most Android smartphones. That way, every developer that resorts to using it to render internet content inside their app can do so without warning about compatibility issues.


1 Answers

Apparently:

web.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

was causing the webview to freak out, as it reorganizes the html renderer to place everything in a single column (or try to anyways). Disabling this line or using NORMAL causes the render to be just fine.

I was only using this line to disable horizontal scrolling. So now i have THAT issue to deal with again and still.

like image 157
RedactedProfile Avatar answered Oct 01 '22 22:10

RedactedProfile