2010-08-29 15 views
8

ho dichiarato un'attività WebView nel manifesto come questo:Come mostrano una WebView con stile Theme.Dialog in Android

<activity android:name=".MyWebView" 
    android:label="@string/app_name" 
    android:configChanges="orientation|keyboardHidden" 
    android:theme="@android:style/Theme.Dialog"> 
</activity> 

Il WebView assomiglia a questo:

<?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> 

Quando inizio a questo attività all'interno della mia attività principale, solo il titolo della finestra di dialogo, contenente il nome dell'app, è visibile ma non la WebView. Se aggiungo un TextView al LinearLayout, viene mostrato anche, ma manca ancora il WebView. Se non si applica android:theme="@android:style/Theme.Dialog" nel manifest, viene visualizzata la WebView.

Perché è e come posso visualizzare una WebView in una finestra di dialogo?

risposta

23

Ho scoperto che funziona se si modifica la visualizzazione Web su wrap_content anziché su fill_parent. Non ho idea del perché. Probabilmente è un bug.

+0

Bello, lavora per me. :) Ci vuole fino a quando non viene visualizzata la WebView (quindi, c'è solo il titolo all'inizio) ma forse aggiungerò un progresso infinito mentre il sito web viene caricato. – Manuel

+0

sì, sembra un bug anche per me, wrap_content va bene. –

+0

ha funzionato anche per me :) Grazie! –

0

Penso che quello che stai facendo funzionerebbe. Forse prova a sovrascrivere la classe di dialogo invece della classe di attività.

+0

Non riesco a farlo funzionare, in entrambi i casi. Potresti dare un esempio funzionante? – Manuel

0

Utilizzare WebView come layout radice, senza elementi circostanti. Non so perché non ha funzionato con il layout circostante.

3

Il modo migliore che ho trovato è un piccolo trucco come questo:

Avviso la 1000dp per minWidth e MinHeight

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:minWidth="1000dp" 
      android:minHeight="1000dp" > 

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

</LinearLayout> 

L'altro modo è quello di avvolgere il contenuto sul WebView ma non lo espandi fino a quando non carichi una pagina web ... quindi inizierà in piccolo, quindi espanderà. Questo modo hackish farà all'inizio il grande dialogo.