Hi Leute,
ich würde gerne in einer WebView eine Website anzeigen, die nicht mir gehört. Auf dieser Website befindet sich eine mit jQuery realisierte Slideshow. Firebug sagt konkret jquery-1.3.2.min.js und jquery-ui-1.7.2.custom.min.js.
Im Android Standard-Browser und in Chrome Beta funktioniert die Slideshow, nur in meiner WebView tut sie das nicht.
Ich hab mich mit verschiedensten Einstellungsmöglichkeiten gespielt und unter anderem hardwareAccelerated auf true gesetzt, Plugins enabled, den PluginState auf On gestellt und setAllowFileAccess auf true. JavaScript ist auch aktiv. Alles etwas zusammen gewürfelt, das Resultat von einiger Zeit googeln -.-
Nun wende ich mich mit meinen letzten paar Nerven zu dem Thema an euch, in der Hoffnung dass mir jemand den entscheidenden Brotkrumen zuwirft. Hat jemand eine Idee?
Gruß,
matze
EDIT:
also es funktioniert jetzt. Letztendlich habe ich nach einigem min und target SDK herumstellen bemerkt, dass meine Zeile
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
als deprecated markiert ist. Hab sie auskommentiert und siehe da, es geht. Ob das jetzt allerdings der ausschlaggebende Punkt war kann ich echt nicht sagen.
Folgenden Code habe ich
[Java]
// Skalierung der Seite setzen
wv.setInitialScale(Tools.getScale(this));
wv.setPadding(0, 0, 0, 0);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("UTF-8");
settings.setPluginsEnabled(true);
settings.setPluginState(WebSettings.PluginState.ON);
settings.setAllowFileAccess(true);
settings.setAllowContentAccess(true);
// Ansicht hochkant starten
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// Websites enthalten Javascript, ohne geht das Scrollen nicht mehr
settings.setJavaScriptEnabled(true);
// Online-Seiten sollen scroll und zoombar sein
settings.setBuiltInZoomControls(true);
wv.setHorizontalScrollBarEnabled(true);
// Website in sichtbaren Bereich einpassen
settings.setUseWideViewPort(true);
// settings.setLoadWithOverviewMode(true);
//settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
// URL laden
wv.loadUrl(location);
[/Java]
Die Tools.getScale(this) sieht so aus:
[Java]
/**
* calculates the scale for the webview content
* @param context Context
* @return int
*/
public static int getScale(Context context) {
if (context == null) return 0;
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
Double val = Double.valueOf(width) / Double.valueOf(Const.WEBWIDTH); // Const.WEBWIDTH hat den Wert 638, ist nur der Übersicht und Sauberkeit halber ausgelagert
val = val * 100d;
return val.intValue();
}
[/Java]
Des Weiteren habe ich in der AndroidManifest dem <application> Tag
android:hardwareAccelerated="true"
hinzugefügt. Hierzu habe ich meien minSdk auf 9 und meine targetSdk auf 14 gestellt. Irgendwo steht zwar, dass hardwareAccelerated erst ab 11 geht, habs aber auf nem Gerät mit Android 2.3.4 getestet, das die SdkVersion 9 oder 10 haben müsste. Funktioniert dort auch einwandfrei. Zumindest wirfts keinen Fehler
Falls jemandem noch Verbesserungen auffallen oder ich noch mehr Code posten soll einfach bescheid geben.
Gruß,
matze