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!
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.
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With