2010-09-27 7 views
67

Ich versuche, das WebView ein ähnliches Verhalten wie der Android-Browser zu haben. Der Browser öffnet alle Seiten auf eine Weise, die versucht, ihre Breite an den Bildschirm anzupassen. Das Standardverhalten von WebView beginnt jedoch bei einem Pixel-Maßstab von 100%, sodass es in der oberen linken Ecke vergrößert wird.So legen Sie den anfänglichen Zoom/Breite für eine Webansicht fest

Ich habe die letzten paar Stunden damit verbracht, einen Weg zu finden, wie die WebView die Seite auf den Bildschirm skalieren kann wie im Browser, aber ich habe kein Glück. Hat jemand einen Weg gefunden, dies zu erreichen?

Ich sehe, ist eine Einstellung namens SetLoadWithOverviewMode, aber das schien überhaupt nichts zu tun. Ich experimentierte auch mit setInitialScale, aber auf verschiedenen Bildschirmgrößen und Webseitengrößen, die nicht so anmutig wie die Skalierung des Browsers sein werden.

Irgendwelche irgendwelche führen?

Dank

EDIT: Brians Methode scheint, wenn das Telefon in der Landschaft zu arbeiten, aber nicht im Portrait. Im Hochformat ist es nah, passt aber nicht auf den gesamten Bildschirm der Seite. Ich starte dieses Bounty mit der Hoffnung, dass es einen sicheren Weg gibt, den ersten Zoom so zu gestalten, dass die Seite in jeder Ausrichtung oder Bildschirmgröße an die Breite der Seite angepasst wird.

+0

haben Sie eine Lösung dafür gefunden. – Samuel

+0

@Sam, yep die akzeptierte Lösung unten funktioniert für mich. – cottonBallPaws

+0

Aus irgendeinem Grund verbrachte ich einen ganzen Tag damit und es funktionierte nur in api7 und nicht darüber. Schließlich musste das selbe mit setInitialScale implementiert werden und die anfängliche Skalierung manuell berechnet werden. Übrigens hatte ich ein einzelnes Bild mit 480x800 Dimensionen. – Samuel

Antwort

150

Der folgende Code lädt die Desktop-Version der Google-Startseite vollständig im webview für mich in Android 2.2 auf einem 854x480 Pixel herausgezoomt, um den Bildschirm anzupassen. Wenn ich das Gerät neuorientiere und es im Hoch- oder Querformat neu lädt, passt die Seitenbreite jedes Mal vollständig in die Ansicht.

BrowserLayout.xml:

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

    <WebView android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 

Browser.java:

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 

public class Browser extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.BrowserLayout); 

     String loadUrl = "http://www.google.com/webhp?hl=en&output=html"; 

     // initialize the browser object 
     WebView browser = (WebView) findViewById(R.id.webview); 

     browser.getSettings().setLoadWithOverviewMode(true); 
     browser.getSettings().setUseWideViewPort(true); 

     try { 
      // load the url 
      browser.loadUrl(loadUrl); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Danke Brian, das scheint auf den ersten Blick funktioniert. Ich werde noch einige weitere Seiten testen, bevor ich das Kopfgeld belohne, aber das sieht vielversprechend aus! – cottonBallPaws

+0

Das war eine großartige Ex-Erklärung. +1 – Tarik

+0

gute Antwort + 1 – DeRagan

6

Versuchen using a wide viewport:

webview.getSettings().setUseWideViewPort(true); 
+1

Danke, das scheint in die richtige Richtung zu sein. Das an und für sich schien nichts zu tun, aber mit der Kombination von setInitialScale (50) funktionierte es perfekt im Porträt. Wenn Sie das Telefon jedoch im Querformat halten, passt es nicht zum Bildschirm. Gibt es noch andere Einstellungen, die ich zusätzlich verwenden sollte? Hier ist, was ich gerade habe: setBuiltInZoomControls (true), setUseWideViewPort (true), setInitialScale (50). Ich möchte, dass es gut auf den Bildschirm passt, unabhängig von der Größe oder Dichte des Bildschirms. Danke noch einmal. – cottonBallPaws

+0

funktioniert nicht für mich .. –

2

// für Bilder und SWF-Videos verwenden Breite als "100%" und die Höhe als "98%"

mWebView2.getSettings().setJavaScriptEnabled(true); 
mWebView2.getSettings().setLoadWithOverviewMode(true); 
mWebView2.getSettings().setUseWideViewPort(true); 
mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
mWebView2.setScrollbarFadingEnabled(true); 
+3

Warum Höhe bei 98%? – hotshot309

+0

können Sie mir helfen zu dieser https://stackoverflow.com/questions/49098464/loading-gif-in-webview-not-adjusting-to-webview – Stuart2041

19

Ich fand heraus, warum die Hochformatansicht das Bildfenster nicht vollständig ausfüllte. Zumindest in meinem Fall war es, weil die Bildlaufleiste immer angezeigt wurde. Neben dem Ansichtsfenster angezeigten Code, versuchen Sie dies:

browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    browser.setScrollbarFadingEnabled(false); 

Dies bewirkt, dass die Scrollbar Bauraums nicht aufnehmen, und ermöglicht die Webseite das Ansichtsfenster zu füllen.

this helps

9

Es ist und alte Frage, aber lassen Sie mich ein Detail hinzufügen nur für den Fall mehr Leute wie mich hier ankommen.

Die ausgezeichnete Antwort von Brian gepostet funktioniert nicht für mich in Jelly Bean. Ich habe auch hinzufügen: kann

browser.setInitialScale(30); 

Der Parameter jeder Prozentsatz tha sein wird erreicht, daß die Größe veränderte Gehalt kleiner ist als die Webansicht Breite. Dann setzt setUseWideViewPort (true) die Inhaltsbreite auf das Maximum der Webview-Breite.

+0

Meiner Webseite in Webansicht angezeigt besteht aus vielen Javascript, es ist wie OSD in TV, Widgets mit Tasten. Ich verwendete Ihre Lösung und ich habe 2 Kommentare dazu: 1. erste Ladung von Webview ist nicht erfolgreich, Webview ist schwarz 2. 2. ist richtig, aber ich kann doppelt tippen und das ist etwas, was ich nicht will , weil es die Widgets skaliert und Knöpfe aufhören zu arbeiten. Jede mögliche Hilfe, die Sie zur Verfügung stellen konnten? Vielen Dank. – MartinC

+0

Es soll beachtet werden, dass der Standardwert von 'WebView.setInitialScale (int)' 0 nicht 100 [Link zur Dokumentation] (https://developer.android.com/reference/android/webkit/WebView.html# setInitialScale (int)) – DBX12

1

Ich arbeite mit Laden von Bildern für diese Antwort, und ich möchte, dass sie die Breite des Gerätes skaliert werden. Ich finde, dass für ältere Telefone mit Versionen weniger als API 19 (KitKat) das Verhalten für Brians Antwort nicht ganz so ist, wie ich es mag. Es bringt eine Menge Whitespace um einige Bilder auf älteren Handys, aber funktioniert auf meinem neueren. Hier ist meine Alternative, mit Hilfe von dieser Antwort: Can Android's WebView automatically resize huge images? Der Layout-Algorithmus SINGLE_COLUMN ist veraltet, aber es funktioniert und ich fühle mich wie es für die Arbeit mit älteren Webviews geeignet ist.

WebSettings settings = webView.getSettings(); 

// Image set to width of device. (Must be done differently for API < 19 (kitkat)) 
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
    if (!settings.getLayoutAlgorithm().equals(WebSettings.LayoutAlgorithm.SINGLE_COLUMN)) 
     settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 
} else { 
    if (!settings.getLoadWithOverviewMode()) settings.setLoadWithOverviewMode(true); 
    if (!settings.getUseWideViewPort()) settings.setUseWideViewPort(true); 
} 
Verwandte Themen