如何在Android中以Theme.Dialog样式显示WebView

8

我在清单文件中这样声明了一个WebView活动:

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

WebView长这样:
<?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>

当我从我的主活动启动这个活动时,对话框的标题(包含应用程序名称)是可见的,但WebView不可见。如果我将TextView添加到LinearLayout中,它也会显示,但仍然缺少WebView。 如果我在清单中不应用android:theme="@android:style/Theme.Dialog",那么WebView就会显示。
为什么会这样,如何在对话框中显示WebView?
4个回答

23

我发现如果将webview的属性改为wrap_content而不是fill_parent,它就能够正常地工作。不知道为什么,可能是个bug。


不错,对我来说可以。 :) WebView 显示需要一些时间(所以一开始只有标题),但也许我会在网站加载时添加一个无限进度条。 - Manuel

3
我发现最好的方法是使用以下小技巧:
请注意minWidth和minHeight的值为1000dp。
<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>

另一种方法是将内容包装在WebView中,但是它只有在加载网页后才会扩展,因此它将从小开始然后扩大。这种hackish的方式将导致对话框在开始时很大。

0
我认为你所做的应该是可行的。也许尝试覆盖对话框类而不是活动类会更好。

我无法让它工作,你能给一个可运行的例子吗? - Manuel

0
使用WebView作为根布局 - 没有任何周围的元素。不知道为什么带有周围布局时它不起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接