WebView无法工作,使用浏览器在外部启动URL。在应用程序中显示网页。

7

我创建了一个主界面,其中包含一些图标,其中之一是Facebook图标,点击它会通过意图启动facebook.xml页面。

该xml页面的代码设置如下:

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="10"
android:id="@+id/webView" >
</WebView>

我希望加载此网址: "http://www.j.mp/tkf4mApp"

与此xml文件相关联的Java文件如下:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class Facebook extends Activity {

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.facebookpage);

    webView=(WebView)findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://www.j.mp/tkf4mApp");


}
}

但是在facebook.xml中,它并没有在应用程序内显示网页,而是在外部启动浏览器,但我希望它能在应用程序内显示。


2
这将在您的应用程序内显示Web视图。 - Triode
对我来说,它看起来是正确的。 - Phantômaxx
它可以启动外部选项,比如在Opera、UC浏览器、本地浏览器和Chrome之间进行选择(这些都在我的手机上),该应用程序可以通过以下URL访问:http://j.mp/thekfac。 - Manan Gupta
4个回答

16
根据这个答案:如何在WebView中加载外部网页,在调用loadUrl之前需要设置一个WebViewClient:
webView.setWebViewClient(new WebViewClient());

如果没有设置WebViewClient,则导航的默认操作是将其转发到浏览器,因此您被发送到浏览器的原因就在于此。


我尝试过了,但那也不起作用,请帮忙看看是否还有其他方法。该应用可以通过以下网址访问:j.mp/thekfac。 - Manan Gupta
@MananGupta,您链接了您的APK。 这并没有使调查变得更简单。 另外,您所说的“不工作”是什么意思? - marcin.kosiba
@MananGupta - 试着这样做:webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { android.util.Log.w("Test", "shouldOverrideUrlLoading " + url); return false; } }); webView.loadUrl("http://www.j.mp/tkf4mApp");并检查您是否在日志中看到了调试消息。 - marcin.kosiba
谢谢伙计,正在处理,我会尽快回复。 - Manan Gupta
请您再详细阐述一下,我将不胜感激。 - Manan Gupta
显示剩余4条评论

0

虽然有些晚了,但这可能会帮助其他开发人员...

在加载您的URL之前,这是您需要添加的代码。

webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

根据文档,文档中的文字如下所示。
/*@return {@code true} if the host application wants to leave the current WebView
             *         and handle the url itself, otherwise return {@code false}.*/

它简单地说明,如果你从 shouldOverrideUrlLoading 方法中返回 true,它将要求设备的默认浏览器处理打开 URL 的请求,如果你返回 false,则你的 URL 将仅通过 webview 加载。

现在,你可以在这个 setWebViewClient 调用之后加载你的 URL,或者你也可以在返回值之前在 shouldOverrideUrlLoading 方法中加载你的 URL。


0
package com.example.webview;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {


   private WebView browser;

   @Override        
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      browser = (WebView)findViewById(R.id.webView1);
      browser.setWebViewClient(new MyBrowser());
   }


   public void open(View view){
      String url = "http://www.j.mp/tkf4mApp";
      browser.getSettings().setLoadsImagesAutomatically(true);
      browser.getSettings().setJavaScriptEnabled(true);
      browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
      browser.loadUrl(url);

   }
   private class MyBrowser extends WebViewClient {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url);
         return true;
      }
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }

}

这个链接可能会对你有所帮助... http://www.tutorialspoint.com/android/android_webview_layout.htm


感谢你的帮助,伙计。 - Manan Gupta

0

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