WebView是否需要WebViewClient才能工作?

时间:2012-01-05 09:40:32

标签: android android-webview

我正在浏览android教程并尝试了WebView示例。这就是我最终的结果:

WebAppActivity

public class WebAppActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView wv = (WebView) findViewById(R.id.webView1);
        wv.loadUrl("http://www.google.com");

    }
}

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

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

</LinearLayout>

但是,不是在应用程序本身中加载页面,一旦应用程序启动,默认的android浏览器就会打开,并且页面会在浏览器而不是应用程序中加载。当我按下时,我返回显示空白屏幕的应用程序活动。

有谁知道为什么会这样?

编辑:

清单

<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".WebAppActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

这只是为了表明我已经添加了INTERNET权限

编辑:

只要我添加WebViewClient

wv.setWebViewClient(new WebViewClient() {});

页面在应用程序中加载。这是预期的行为吗? Android WebView 是否需要 WebViewClient? (无法找到任何文件)

编辑:

我注意到当我在具有Google API的模拟器中安装apk时会出现此问题。在普通的模拟器上(没有Google API),它的行为符合预期。

5 个答案:

答案 0 :(得分:3)

是的,你必须设置一个在覆盖的方法'shouldOverrideUrlLoading'上返回true的WebViewClient,以便你的webview加载你应用中的url。

如果你想要一个例子,请告诉我。


编辑

@Aki WebViewClient.shouldOverrideUrlLoading Documentation

  

当要在当前WebView中加载新URL时,让主机应用程序有机会接管控件。 如果未提供WebViewClient,默认情况下,WebView将要求活动管理器为URL选择正确的处理程序。如果提供了WebViewClient,则返回true表示主机应用程序处理url,而return false表示当前WebView处理该URL。

答案 1 :(得分:0)

private WebView webVenue;
private WebSettings websettings;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.schedule_time);

        webVenue = (WebView)findViewById(R.id.webview_schedule_time);
        txtEmptyMsg = (TextView)findViewById(R.id.txtEmptyMsg);

        mContext = this;        
        webVenue.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webVenue.getSettings().setJavaScriptEnabled(true);
        websettings=webVenue.getSettings();
        webVenue.setScrollBarStyle(ScrollView.SCROLLBARS_OUTSIDE_OVERLAY);
        webVenue.loadUrl(URL);
}
}

所有最好的......

答案 2 :(得分:0)

不是没有,但它允许你做很多事情。

请注意,在WebViewClient中调用shouldOverrideUrlLoading似乎也不起作用,因此您应该在onPageFinished中进行处理。

这是blog post,它将指导您完成。

答案 3 :(得分:0)

要将网页从网址加载到网页浏览中,无需设置网页浏览客户端。没有webview客户端,您可以将网页加载到webview中。但WebViewClient为处理webview带来了许多优势。从url加载网页的示例用法,


webView.loadUrl(yoururl);

答案 4 :(得分:0)

在默认的Android浏览器中打开url的唯一原因是“wv.loadUrl(”http://www.google.com“);”

当您加载http://www.google.com时,Google网站实际上会将网页重定向到http://www.google.co.in(假设您要从印度发布该应用)。

如果你运行“wv.loadUrl(”http://www.google.co.in“);”,谷歌将不会重定向页面,第一页将在你的应用程序中打开,进一步的点击将在系统浏览器中打开。< / p>

要处理此进一步的点击,您需要WebViewClient。