Ich versuche, das WebView so zu gestalten, dass es sich ähnlich wie der Android-Browser verhält. Der Browser öffnet alle Seiten so, dass versucht wird, ihre Breite an den Bildschirm anzupassen. Das Standardverhalten von WebView besteht jedoch darin, mit einer 100% igen Pixelskala zu beginnen, sodass es in der oberen linken Ecke vergrößert wird.
Ich habe die letzten Stunden damit verbracht, einen Weg zu finden, wie WebView die Seite wie im Browser auf den Bildschirm skalieren kann, aber ich habe kein Glück. Hat jemand einen Weg gefunden, dies zu erreichen?
Ich sehe eine Einstellung namens setLoadWithOverviewMode, aber das schien überhaupt nichts zu bewirken. Ich habe auch mit setInitialScale experimentiert, aber auf verschiedenen Bildschirmgrößen und Webseitengrößen, die nicht so elegant sind wie die Skalierung des Browsers.
Hat jemand irgendwelche Hinweise?
Vielen Dank
EDIT: Brians Methode scheint zu funktionieren, wenn das Telefon im Querformat, aber nicht im Hochformat. Im Hochformat ist es nah, passt aber immer noch nicht auf den gesamten Bildschirm der Seite. Ich beginne diese Prämie mit der Hoffnung, dass es einen sicheren Weg gibt, den anfänglichen Zoom so zu gestalten, dass die Seite in jeder Ausrichtung oder Bildschirmgröße an die Breite der Seite angepasst wird.
Antworten:
Der folgende Code lädt die Desktop-Version der Google-Startseite vollständig herausgezoomt, um in die
webview
für mich in Android 2.2 auf einem 854 x 480 Pixel großen Bildschirm zu passen . Wenn ich das Gerät neu ausrichte und es im Hoch- oder Querformat neu lade, 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(); } } }
quelle
Ich fand heraus, warum die Porträtansicht das Ansichtsfenster nicht vollständig ausfüllte. Zumindest in meinem Fall lag es daran, dass die Bildlaufleiste immer angezeigt wurde. Fügen Sie zusätzlich zum obigen Ansichtsfenstercode Folgendes hinzu:
browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); browser.setScrollbarFadingEnabled(false);
Dadurch nimmt die Bildlaufleiste keinen Platz im Layout ein und die Webseite kann das Ansichtsfenster füllen.
Hoffe das hilft
quelle
Es ist eine alte Frage, aber lassen Sie mich ein Detail hinzufügen, nur für den Fall, dass mehr Leute wie ich hier ankommen.
Die ausgezeichnete Antwort von Brian funktioniert bei mir in Jelly Bean nicht. Ich muss auch hinzufügen:
browser.setInitialScale(30);
Der Parameter kann ein beliebiger Prozentsatz sein, mit dem erreicht wird, dass die Größe des Inhalts kleiner als die Breite der Webansicht ist. Dann erweitert setUseWideViewPort (true) die Inhaltsbreite auf das Maximum der Webansichtsbreite.
quelle
WebView.setInitialScale(int)
0 nicht 100 ist. Link zur DokumentationVersuchen Sie es mit einem breiten Ansichtsfenster :
webview.getSettings().setUseWideViewPort(true);
quelle
// Verwenden Sie für Bilder und SWF-Videos die Breite "100%" und die Höhe "98%".
mWebView2.getSettings().setJavaScriptEnabled(true); mWebView2.getSettings().setLoadWithOverviewMode(true); mWebView2.getSettings().setUseWideViewPort(true); mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWebView2.setScrollbarFadingEnabled(true);
quelle
Ich arbeite mit dem Laden von Bildern für diese Antwort und möchte, dass sie auf die Breite des Geräts skaliert werden. Ich finde, dass bei älteren Telefonen mit Versionen unter API 19 (KitKat) das Verhalten für Brians Antwort nicht ganz so ist, wie ich es mag. Es setzt viel Leerzeichen um einige Bilder auf älteren Handys, funktioniert aber auf meinem neueren. Hier ist meine Alternative mit Hilfe dieser Antwort: Kann WebView von Android die Größe großer Bilder automatisch ändern? Der Layout-Algorithmus
SINGLE_COLUMN
ist veraltet, funktioniert aber und ist meiner Meinung nach für die Arbeit mit älteren Webansichten geeignet.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); }
quelle
Wenn Sie die Webansicht herausgefunden haben, Ihre Bilder aber immer noch nicht maßstabsgetreu sind, war die beste Lösung, die ich ( hier ) gefunden habe, einfach, dem Dokument Folgendes voranzustellen:
<style>img{display: inline; height: auto; max-width: 100%;}</style>
Infolgedessen werden alle Bilder so skaliert, dass sie der Breite der Webansicht entsprechen.
quelle
in Kotlin können Sie verwenden,
webView.isScrollbarFadingEnabled = true webView.setInitialScale(100)
quelle