2010-08-29 3 views
8

Je déclarai une activité WebView dans le manifeste comme ceci:Comment afficher un WebView avec un style Theme.Dialog dans Android

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

Le WebView ressemble à ceci:

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

Quand je commence cette activité dans mon activité principale, seul le titre de la boîte de dialogue, contenant le nom de l'application, est visible mais pas le WebView. Si j'ajoute un TextView au LinearLayout, il est également affiché, mais le WebView est toujours manquant. Si je n'applique pas android:theme="@android:style/Theme.Dialog" dans le manifeste, le WebView est affiché.

Pourquoi est-ce que cela et comment puis-je afficher un WebView dans une boîte de dialogue?

Répondre

23

J'ai trouvé que cela fonctionne si vous changez le webview en wrap_content plutôt qu'en fill_parent. Aucune idée pourquoi. C'est probablement un bug.

+0

Nice, travaille pour moi. :) Il faut attendre que le WebView soit affiché (donc, il n'y a que le titre au début) mais peut-être que je vais ajouter une progression infinie pendant le chargement du site. – Manuel

+0

ouais, ça me semble aussi un bug, wrap_content va bien. –

+0

travaillé pour moi aussi :) Merci! –

0

Je pense que ce que vous faites fonctionnerait. Peut-être essayer de remplacer la classe de dialogue au lieu de la classe d'activité.

+0

Je n'arrive pas à faire fonctionner, de toute façon. Pourriez-vous donner un exemple de travail? – Manuel

0

Utilisez le WebView en tant que mise en page racine - sans élément environnant. Je ne sais pas pourquoi cela n'a pas fonctionné avec la disposition environnante.

3

La meilleure façon que je l'ai trouvé est un petit truc comme ceci:

Notez que le 1000dp pour minWidth et 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'autre façon est d'envelopper le contenu de la WebView, mais il ne sera pas Développez jusqu'à ce que vous chargiez une page Web. Ainsi, il commencera petit, puis développera. Cette manière hackish fera le grand dialogue au début.

Questions connexes