WebView是否需要WebViewClient工作?

我正在浏览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浏览器打开,页面加载在浏览器,而不是应用程序。 当我按下时,我会返回到显示空白屏幕的应用程序活动。

有谁知道这是为什么发生?

编辑:

performance

 <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),其行为如预期。

Solutions Collecting From Web of "WebView是否需要WebViewClient工作?"

是的,您必须设置一个WebViewClient,在重写的方法“shouldOverrideUrlLoading”上返回true,以便您的webview在您的应用中加载url。

让我知道你是否想要一个例子。


编辑

@Aki WebViewClient.shouldOverrideUrlLoading文档

当一个新的URL将被加载到当前的WebView中时,主机应用程序有机会接pipe控制权。 如果没有提供WebViewClient,默认情况下,WebView将要求活动pipe理器为URLselect正确的处理程序 。 如果提供了WebViewClient,则返回true表示主机应用程序处理url,而返回false表示当前的WebView处理url。

 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); } } 

祝一切顺利…

没有不完全,但它可以让你做很多东西。

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

这是一篇博客文章 ,将指导您完成。

从url加载网页到webview,没有必要设置webview客户端。 没有webview客户端,你可以加载一个网页到你的web视图。 但是WebViewClient为处理webview带来了许多好处。 从url加载网页的示例用法,

 webView.loadUrl(yoururl); 

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

当您加载http://www.google.com&#x65F6; ,Google网站实际上会将该网页redirect到http://www.google.co.in (假设您正在从印度启动该应用程序)。

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

要处理这个更多的点击,你需要WebViewClient。