Android webview在调用loadurl时启动浏览器

我创建了一个Activity,它在LinearLayout中有一个标题和一个web视图。在onResume()方法中,它调用webView.loadUrl(url)。问题在于,该活动首先显示标题,屏幕其余部分为空白,然后启动设备浏览器并显示URL页面。我想看到的是在标题下面的WebView中显示的页面。有什么问题吗?

< p > 编辑: 好的,进一步搜索,找到了这个:

点击url打开默认浏览器

它指向WebView教程在这里

只需实现web客户端并设置它。

223262 次浏览

根据Maudicus和Hit的建议回答我的问题。

查看WebView教程在这里。 只需实现web客户端并将其设置为之前loadUrl。最简单的方法是:

myWebView.setWebViewClient(new WebViewClient());

对于更高级的web内容处理,可以考虑使用ChromeClient。

用这个:

lWebView.setWebViewClient(new WebViewClient());

像这样使用:

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


WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl("https://google.com");
}

试试这段代码…

private void startWebView(String url) {


//Create new webview Client to show progress dialog
//When opening a url or click on link


webView.setWebViewClient(new WebViewClient() {
ProgressDialog progressDialog;


//If you will not use this method url links are opeen in new brower not in webview
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}


//Show loader on url load
public void onLoadResource (final WebView view, String url) {
if (progressDialog == null) {
// in standard case YourActivity.this
progressDialog = new ProgressDialog(view.getContext());
progressDialog.setMessage("Loading...");
progressDialog.show();
}
}
public void onPageFinished(WebView view, String url) {
try{
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}catch(Exception exception){
exception.printStackTrace();
}
}


});


// Javascript inabled on webview
webView.getSettings().setJavaScriptEnabled(true);


// Other webview options
/*
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.getSettings().setBuiltInZoomControls(true);
*/


/*
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
webview.loadData(summary, "text/html", null);
*/


//Load url in webview
webView.loadUrl(url);
}
我也面临同样的问题,但我找到了解决方案 Android关于WebView的官方文档 < / p > 这是我的onCreateView()方法,在这里我使用了两个方法来打开url

方法1是在浏览器中打开url

方法2是在你想要的WebView中打开url。 我正在使用方法2为我的应用程序,这是我的代码:

public class MainActivity extends Activity {
private WebView myWebView;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false);


// Show the dummy content as text in a TextView.
if (mItem != null) {


/* Method : 1
This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */
//((WebView)   rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url);


// Method : 2
myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file
myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient
myWebView.loadUrl(mItem.url); // Load your desired url
}


return rootView;
}                                                                                               }

让你的活动像这样。

public class MainActivity extends Activity {
WebView browser;


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


// find the WebView by name in the main.xml of step 2
browser=(WebView)findViewById(R.id.wvwMain);


// Enable javascript
browser.getSettings().setJavaScriptEnabled(true);


// Set WebView client
browser.setWebChromeClient(new WebChromeClient());


browser.setWebViewClient(new WebViewClient() {


@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
// Load the webpage
browser.loadUrl("http://google.com/");
}
}

简单回答你可以这样用

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
setContentView(webView);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.google.com");
}
}

如果你看到空页,启用JavaScript。

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);

如果你正在使用webChromeClient,我会建议你一起使用webChromeClientwebViewClient。因为webChromeClient没有提供shouldOverrideUrlLoading。两者都可以使用。

        webview.webViewClient = WebViewClient()
webview.webChromeClient = Callback()


private inner class Callback : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
           

if (newProgress == 0) {
progressBar.visibility = View.VISIBLE
} else if (newProgress == 100) {
progressBar.visibility = View.GONE
}
}


}


我刚刚发现,这取决于URL的格式:

我的代码只使用

webview.loadUrl(url)

无需设置

webView.setWebViewClient(new WebViewClient())

至少在我的情况下。 也许这对你们中的一些人有用

我的问题是,在不打开外部浏览器的情况下切换网站之前,我需要做一个clearHistory。

    @Override
public void onPageFinished(WebView view, String url) {


webView_.clearHistory();


super.onPageFinished(webView_, url);
}