2012-01-05 89 views
10

我正在浏览android教程,并尝试使用WebView示例。这是我结束了:WebView是否需要WebViewClient才能工作?

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? (找不到它的任何文件)

编辑:

我注意到,当我在有谷歌API的仿真器安装APK出现此问题。在普通模拟器上(没有Google API),它的行为如预期。

+1

你的问题已经得到解答:http://stackoverflow.com/questions/2378800/android-webview-click-opens-default-browser – ariefbayu 2012-01-05 09:43:39

+0

@silent请仔细阅读。这不是我的问题。我无法加载第一页本身,它加载在浏览器中而不是应用程序中。请参阅Flo的评论 – 2012-01-05 09:48:27

+1

不,我不认为他在讨论点击链接的网页本身。这听起来像网页永远不会加载在WebView中。 – Flo 2012-01-05 09:49:33

回答

3

是的,你必须设置在overrided法“shouldOverrideUrlLoading”返回true,使您的WebView在您的应用程序加载的URL WebViewClient。

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


编辑

@Aki WebViewClient.shouldOverrideUrlLoading Documentation

给主机应用程序有机会接管控制,当一个新的URL是关于在当前的WebView加载。 如果未提供WebViewClient,默认情况下,WebView将要求活动管理器为url选择适当的处理程序。如果提供了WebViewClient,则返回true表示主机应用程序处理url,而返回false表示当前的WebView处理该url。

+0

@Christopher为什么只有在使用google apis的设备的情况下,我们才需要webViewClient。此外,你可以指出我的一些官方的Android文档,说明这一事实? – 2012-01-12 04:30:26

+0

@Aki编辑答案 – ChristopheCVB 2012-01-12 11:11:37

+0

谢谢克里斯托弗。但是当我们调用'loadUrl'方法时,它并没有说任何'shouldOverrideUrlLoading'被调用。 – 2012-01-12 12:08:50

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

所有最好的...

+0

谢谢你的回答。我**知道**其他方式让它工作。例如添加一个'WebViewClient'就可以运行。开始工作并不是我关心的问题。找出为什么它不工作,是。 – 2012-01-05 09:58:25

+0

嘿你的代码适合我.... – Richa 2012-01-05 10:07:12

+0

哪些代码?你的还是我的? – 2012-01-05 10:08:19

0

无不大,但它可以让你做了很多的东西。

注意,使得在WebViewClient到shouldOverrideUrlLoading通话似乎不擦出火花,所以你应该onPageFinished做你的处理。

这里是一个blog post那会指导您完成。

0

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


webView.loadUrl(yoururl); 
0

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

当您加载http://www.google.com时,谷歌网站实际上将该页面重定向到http://www.google.co.in(假设您从印度启动该应用程序)。

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

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

相关问题