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

问题描述 投票:0回答:12

我创建了一个

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

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

单击 URL 将打开默认浏览器

它指向

WebView
教程这里

只需实现 Web 客户端并进行设置即可。

android android-webview webviewclient
12个回答
901
投票

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

查看 WebView 教程此处。 只需实现 Web 客户端并在 loadUrl 之前设置它即可。最简单的方法是: myWebView.setWebViewClient(new WebViewClient());

要对网页内容进行更高级的处理,请考虑 ChromeClient。


107
投票

lWebView.setWebViewClient(new WebViewClient());



58
投票

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



29
投票

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



23
投票
Android关于WebView的官方文档

这是我的

onCreateView()

方法,这里我使用了两种方法来打开网址



方法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; } }



9
投票
空页面

,请启用 JavaScript。 webView.setWebViewClient(new WebViewClient()); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webView.loadUrl(url);



8
投票

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



6
投票

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



2
投票
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 } } }



1
投票

    https://example.com/example
  • 在浏览器中打开
  • https://example.com/example/
  • (末尾有 /)在 webView 中打开
  • 我的代码只是使用

webview.loadUrl(url)

无需设置

webView.setWebViewClient(new WebViewClient())

至少就我而言。
也许这对你们中的一些人有用。


0
投票

@Override public void onPageFinished(WebView view, String url) { webView_.clearHistory(); super.onPageFinished(webView_, url); }



-1
投票

https://github.com/Amir-yazdanmanesh/Android-ProfessionalWebView

© www.soinside.com 2019 - 2024. All rights reserved.