2010-07-02 18 views
6

Ho due visualizzazioni. Uno è una WebView e l'altro è un ImageView. Ho impostato i controlli di auto di zoom per la WebView in questo modo:C'è un modo per nascondere e mostrare i controlli di zoom su una WebView?

webview.getSettings().setBuiltInZoomControls(true); 

Io sono solo cambiando la visibilità delle due Visualizzazioni utilizzando GONE e Visible. Durante la modifica della vista da WebView a ImageView, i controlli dello zoom non perdono la loro visibilità per un certo periodo di tempo.

C'è qualche modo per nascondere e mostrare gli Autozoomcontrols?

Edit:

ho provato questi metodi, ma non è ancora funzionante.

webview.getZoomControls().setVisibility(View.GONE); 
webview.getZoomControls().invalidate(); 

risposta

-3

Suppongo che funzionerà.

webView.getSettings().setUseWideViewPort(true); 
0

Si può prendere la vista che si ottiene da WebView.getZoomControls() e aggiungerlo come un bambino a un layout accanto (o sopra) il WebView. Sfortunatamente è hacky, getZoomControls è deprecato e non si ottiene lo zoom di pizzicamento a meno che non si chiami WebSettings.setBuildInZoomControls (true) (che aggiungerà una vista di controllo di zoom SECONDO, che non si desidera), ma sembra funzionare. Ecco il mio codice per fare questo, per quello che vale: xml

Disposizione:

<RelativeLayout android:id="@+id/rl" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

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

    <FrameLayout android:id="@+id/wv_zoom_fl" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentBottom="true" /> 

</RelativeLayout> 

Java (in una delle attività):

WebView wv = (WebView)findViewById(R.id.wv); 
FrameLayout zoomfl = (FrameLayout)findViewById(R.id.wv_zoom_fl); 
zoomfl.removeAllViews(); 
zoomfl.addView(wv.getZoomControls()); 

Ora per avere lo zoom scompare, è possibile impostare la visibilità di R.id.rl (che contiene la WebView e il FrameLayout contenente i controlli zoom) su RelativeLayout.GONE.

Per una soluzione unhacky: se il vostro Api minima è impostato sul livello 11 (che è 3.0 Honeycomb, così purtroppo questo è improbabile), è possibile utilizzare: http://developer.android.com/reference/android/webkit/WebSettings.html#setDisplayZoomControls(boolean)

3
public void setZoomControlGone(View view){ 
    Class<?> classType; 
    Field field; 
    try { 
     classType = WebView.class; 
     field = classType.getDeclaredField("mZoomButtonsController"); 
     field.setAccessible(true); 
     ZoomButtonsController mZoomButtonsController = new ZoomButtonsController(view); 
     mZoomButtonsController.getZoomControls().setVisibility(View.GONE); 
     try { 
      field.set(view, mZoomButtonsController); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } 
} 
Problemi correlati