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

Android webview在调用loadurl时启动浏览器,android,android-webview,webviewclient,Android,Android Webview,Webviewclient,我创建了一个活动,它在线性布局中有一个标题和一个web视图。在onResume()方法中,它调用webView.loadUrl(url)。问题在于,活动首先显示标题,其余部分显示空白,然后启动设备浏览器,并显示URL页面。我想看到的是标题下方的WebView中显示的页面。有什么问题吗 编辑: 好的,做了进一步的搜索,找到了这个: 它指向WebView教程 只需实现web客户端并设置它 根据Maudicus和Hit的建议回答我的问题 查看WebView教程。 只需实现web客户端,并将其设置为l

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

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

它指向
WebView
教程


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

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

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

myWebView.setWebViewClient(new WebViewClient());

对于Web内容的更高级处理,请考虑色度。

< P>使用此:

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);
}
private void startWebView(字符串url){
//创建新的webview客户端以显示进度对话框
//打开url或单击链接时
setWebViewClient(新的WebViewClient(){
进行对话进行对话;
//如果您不使用此方法,url链接将在新浏览器中打开,而不是在webview中
公共布尔值应重写url加载(WebView视图,字符串url){
view.loadUrl(url);
返回true;
}
//在url加载时显示加载程序
public void onLoadResource(最终WebView视图,字符串url){
如果(progressDialog==null){
//在标准情况下,您的活动是
progressDialog=新建progressDialog(view.getContext());
progressDialog.setMessage(“加载…”);
progressDialog.show();
}
}
公共void onPageFinished(WebView视图,字符串url){
试一试{
if(progressDialog.isShowing()){
progressDialog.disclose();
progressDialog=null;
}
}捕获(异常){
异常。printStackTrace();
}
}
}); 
//在webview上不使用Javascript
webView.getSettings().setJavaScriptEnabled(true);
//其他网络视图选项
/*
webView.getSettings().setLoadWithOverview模式(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(webView.SCROLLBARS\u外部\u覆盖);
webView.SetScrollBarFadinEnabled(假);
webView.getSettings().setBuilTinZoomControl(true);
*/
/*
String summary=“您得了192分。”;
loadData(摘要,“text/html”,空);
*/
//在webview中加载url
loadUrl(url);
}

我也面临同样的问题,我找到了解决办法

这里是我的
onCreateView()
方法,这里我使用了两种方法打开URL

方法1在浏览器中打开url,然后

方法2在您想要的网络视图中打开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不提供应覆盖的URL加载。两者都可以使用

        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中打开
我的代码只使用

webview.loadUrl(url)
不需要设置

webView.setWebViewClient(new WebViewClient())
至少对我来说是这样。
也许这对你们中的一些人有用。

我提到这一点是因为你们解决了我的问题。。。谢谢。瑞,考虑写一个问题的答案,如果你找到了一个解决办法,并接受它。这将帮助其他有同样问题的人。我有一个更糟糕的问题。事实证明,如果不使用自定义WebViewClient,即使是重定向也会随浏览器加载。必须阅读此内容-此内容也说明了这一点。。。为了避免WebView在打开初始页面时启动默认浏览器。感谢这个令人难以置信的神奇小魔法+1…给你减一,安卓…很好的答案。也解决了我的问题。这只适用于初始加载吗?如果要在应用程序中导航浏览器,该怎么办?
myWebView.webViewClient=webViewClient()
在Kotlin中
setJavaScriptEnabled(true)
将XSS漏洞引入应用程序。如果你不需要JavaScript,就不要使用它启用JavaScript这一行非常重要,否则你会得到
你需要启用JavaScript来运行这个应用。
谷歌搜索它只会发现人们对react native有问题,你会发疯的,因为浏览器设置中已经启用了JavaScript。Wini,你可以做smth。像这样
@覆盖公共布尔onKeyDown(int-keyCode,KeyEvent-event事件){if(event.getAction()==KeyEvent.ACTION_-DOWN){switch(keyCode){case-KeyEvent.keyCode_-BACK:if(mWebView.canGoBack()){mWebView.goBack()}否则{finish();}返回true;}}返回super.onKeyDown(keyCode,event);}
@DigvijaySingh检查已接受答案的原件。最初它没有这个代码。这是在回答之后加的该死的,我甚至没想到两者都用。我使用
webview客户端中的
onPageFinished()
WebChromeClient中的
onsolemessage()
。谢谢