WebView Viewport Problem

  • Hi Leute,


    hab grad ein kleines Problem, die WebView ärgert mich :( Und zwar will die meine lokale html Seite nicht richtig darstellen.


    Meine WebView schaut so aus:


    HTML
    <WebView
            android:id="@+id/wvInfo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:background="@android:color/transparent"
            android:layout_below="@+id/btnBack" />


    Die Seite lade ich wie Folgt:


    Java
    WebView wv = (WebView) findViewById(R.id.wvInfo);
    wv.loadUrl(getString(R.string.LOCALWEBVIEWPREFIX) +  getString(R.string.INFOPAGE));


    Meine HTML Datei enthält im Header die Zeile:

    HTML
    <meta name = "viewport" content = "width = device-width" user-scalable = "no">


    Leider geht die HTML-Seite über den sichtbaren Bereich meines Displays hinaus und ich muss nach links und rechts scrollen um alles zu sehen. Deshalb habe ich etwas gegoogelt und folgenden Schnipsel gefunden:

    Java
    WebSettings settings = wv.getSettings();
    settings.setUseWideViewPort(true);
    settings.setLoadWithOverviewMode(true);


    Die WebView zeigt sich ziemlich unbeeindruckt und es sind keine Änderungen feststellbar, außer ich entferne die Zeile mit dem viewport aus der HTML-Datei, dann zeigt der die Seite viel zu klein an.
    Ich habe schon in einem anderen Projekt eine WebView eingesetzt für den gleichen Zweck wie jetzt, da stand in meiner HTML-Datei kein viewport und WebSettings brauchte ich auch keine angeben, allerdings war die Seite auch ohne jegliches CSS. Da hatte er keinerlei Probleme und hat alles richtig umgebrochen.


    Heißt das jetzt für mich das CSS machts kaputt oder muss ich da noch was extra angeben? Braucht es die Angabe von viewport gar nicht oder ist sie einfach nur Falsch? Ich glaub viel fehlt nicht aber ich kriegs grad nicht hin ....


    Kann mir wer helfen?


    Gruß,
    matze

  • Wenn es deine Seite ist, dann kannst du im HTML was machen.


    Leider ist der WebView ziemlich übermütig und will immer alles so anzeigen, wie ein Großer...
    Das kannst du ihm austreiben mit:

    HTML
    <meta name="viewport" content="width=device-width; initial-scale=1.2" />


    Und wenn du ein angepaßtes Layout im HTML laden willst, dass geht das ungefähr so (die small.css musst du schon selber machen):

    HTML
    <link rel="stylesheet" type="text/css" href="/small.css" media="only screen and (max-device-width:600px), only screen and (max-width:600px)" />


    Und dann hab ich noch gefunden, dass WebSettings auch setTextZoom(int percent) anbietet - vielleicht hilft das auch.

  • Hi Uwe,


    erstmal danke für deine schnelle Antwort!


    Leider fruchtet das ganze trotz allem noch nicht so recht, aber dein Link hat mich etwas experimentierfreudig gestimmt also hab ich einfach mal paar sachen ausprobiert ...

    Java
    WebSettings settings = wv.getSettings();
    		settings.setUseWideViewPort(true);
    		settings.setLoadWithOverviewMode(true);
    		settings.setJavaScriptEnabled(true); 
    		settings.setDisplayZoomControls(true); 
    		settings.setEnableSmoothTransition(true);


    Wenn er läd ist das ganze immernoch zu groß aber wenn ich dann 2 mal auf die WebView tippe zoomt er raus und zeigt alles perfekt an. Jetzt ist nur die frage was muss ich setzen, dass er das von haus aus macht aber ich mir nicht mit irgendwelchen fixen angaben das drum für andere Displaygrößen verbau?
    Die Methode setTextZoom macht leider nicht das was ich brauche, Die Seite wird einfach breiter und links und rechts von meinem Text ist mehr Platz ....


    Gruß,
    matze

  • Ich hab das Problem letztens auch mal gehabt und irgendwo etwas dazu gefunden.
    Du kannst das Skalieren vorher setzen.


    View ist in dem Fall der Webview.


    view.setInitialScale(getScale());


    Java
    private int getScale(){
    		Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    		int width = display.getWidth(); 
    		Double val = new Double(width)/new Double(550);
    		val = val * 100d;
    		return val.intValue();
    	}



    Nachtrag: also mein wirres Init sieht so aus


Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!