2014-12-01 15 views
8

Ho un'attività con un layout simile a questo:Perché il pinch-to-zoom non funziona nel mio Android WebView?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${relativePackage}.${activityClass}" > 

    <include layout="@layout/window_title" /> 

    <WebView 
     android:id="@+id/webView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/linear_layout"/> 

</RelativeLayout> 

Ecco come sto configurarlo:

// Enable JavaScript. 
    WebView myWebView = (WebView) findViewById(R.id.webView); 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    // Settings so page loads zoomed-out all the way. 
    webSettings.setLoadWithOverviewMode(true); 
    webSettings.setUseWideViewPort(true); 
    webSettings.setBuiltInZoomControls(true); 

Ecco l'impostazione versione dal mio file manifesto:

<uses-sdk 
    android:minSdkVersion="10" 
    android:targetSdkVersion="17" /> 

Sto provando a caricare questa pagina nella WebView:

https://new.livestream.com/lcboise 

La pagina si carica bene, ma non riesco a pizzicare per ingrandire. Ho provato diverse combinazioni delle impostazioni di WebView (sopra, compresi gli altri non elencati), ma semplicemente non lo zoom.

Osservazioni:

1) Caricamento in corso una pagina diversa che sto usando (https://lcboise.infellowship.com/UserLogin) nella stessa identica WebView mi permette di Zoom.

2) Il mio dispositivo di prova principale, dove NON FUNZIONA, è un HTC One con versione v4.4.3 di Android.

3) Posso caricare, e zoomare, la pagina in diretta su un dispositivo di test più vecchio che sto usando che esegue la versione 2.2 di Android.

È possibile che qualcosa nella pagina stessa interrompa WebView in esecuzione su HTC One? Se è così, qualche ipotesi potrebbe farlo?

Aggiornamento [SOLUZIONE]:

Ecco quello che ho dovuto aggiungere al mio WebView per ottenere pinch-to-zoom per lavorare:

myWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      String javascript="javascript:document.getElementsByName('viewport')[0].setAttribute('content', 'initial-scale=1.0,maximum-scale=10.0');"; 
      view.loadUrl(javascript); 
     } 
    }); 
+1

più uno per la domanda .. –

risposta

10

Questa è la pagina si è collegato ha il seguente meta tag viewport:

<meta name="viewport" content="width=1024, maximum-scale=1.0, target-densitydpi=device-dpi"> 

La pagina che funziona ha una diversa finestra meta tag. Il bit maximum-scale indica a WebView che non consente di eseguire lo zoom oltre la quantità specificata.

Il sito dovrebbe anche essere rotto in qualsiasi browser mobile moderno. Impostare la scala massima su un valore basso come quello non è molto "mobile friendly", quindi potrebbe essere solo un bug sul sito. Hai provato a contattare il proprietario, forse possono ripararlo dal lato server?

Non c'è molto che si possa fare in WebView che non risulti in altri siti che non vengono visualizzati correttamente. Potresti provare a iniettare JS per correggere la pagina entro il changing the meta tag come ultima risorsa.

+0

Grazie per la risposta! Ho finito per dover iniettare alcuni Javascript nella pagina proprio come hai detto tu. Vedere il mio aggiornamento sopra per vedere il codice esatto che ho inserito. –

+0

La tua risposta mi ha aiutato, più 1 –

4

Hai provato questo suggerimento?

webSettings.setSupportZoom(true); 

Vedi Disable pinch zoom in WebView?

Nota il collegamento è per quanto riguarda per la disattivazione dello zoom. Ma forse lo zoom è disabilitato di default come suggeriscono alcuni utenti.

+0

Grazie per la risposta! Sfortunatamente, questo non funziona. Come ho detto sopra, sono un po 'perplesso perché posso caricare una pagina diversa nell'esatta visualizzazione Web nell'attività esatta e ingrandisce perfettamente. A prima vista, ciò sembrerebbe implicare la stessa pagina web come fonte del problema. –

1

Per zoom:

webSettings.getSettings().setBuiltInZoomControls(true); 

per disabili:

webSettings.getSettings().setBuiltInZoomControls(false); 
3

Aggiungere queste due righe per consentire pinch to zoom in WebView

webview.getSettings().setSupportZoom(true); 
webview.getSettings().setBuiltInZoomControls(true) 
0

wv.getSettings() setBuiltInZoomControls (. vero); wv.getSettings(). SetDisplayZoomControls (false);

ha funzionato perfettamente per me.

Problemi correlati