【问题标题】:Android webview load websiteAndroid webview 加载网站
【发布时间】:2018-05-08 00:23:48
【问题描述】:

我有一个 webview 并加载它的网页。工作正常。

但问题是,“当我点击网页中的任何链接时,重定向到浏览器而不是在创建的网页中”。

我想在同一个网页中打开它。

【问题讨论】:

    标签: android webview


    【解决方案1】:

    如果您想更好地控制点击链接的加载位置,请创建您自己的 WebViewClient 来覆盖 shouldOverrideUrlLoading() 方法。

    在 webview 中的 loadUrl() 之前添加以下代码。

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

    更多详情请参考Web Apps in WebView

    【讨论】:

      【解决方案2】:

      创建一个扩展 WebViewClient 的类:

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

      然后将 webViewClient 设置为您的 webview 最初:

      webView.setWebViewClient(new MyBrowser());
      

      【讨论】:

        【解决方案3】:

        在特定活动标签内的AndroidMenifest.xml 中使用以下代码

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE"/>
        </intent-filter>
        

        【讨论】:

          【解决方案4】:

          这里我为你准备了一个示例 Activity 类。

          每当您尝试在 WebView 中打开链接时,浏览器都会打开该链接,因为您没有在代码中使用任何 WebViewClient。请参考下面我分享给大家的代码!

          public class WebViewClientDemoActivity extends Activity {
              /** Called when the activity is first created. */
          
              WebView web;
          
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
          
                  web = (WebView) findViewById(R.id.webview01);
          
                  // Setting the WebView Client for the WebView over here
                  web.setWebViewClient(new myWebClient());
                  web.getSettings().setJavaScriptEnabled(true);
                  web.loadUrl("http://www.google.com");
              }
          
                // The WebViewClient class
              public class myWebClient extends WebViewClient
              {
                  @Override
                  public void onPageStarted(WebView view, String url, Bitmap favicon) {
                      // TODO Auto-generated method stub
                      super.onPageStarted(view, url, favicon);
                  }
          
                  @Override
                  public boolean shouldOverrideUrlLoading(WebView view, String url) {
                      // TODO Auto-generated method stub
          
                      view.loadUrl(url);
                      return true;
          
                  }
              }
          
              // To handle "Back" key press event for WebView to go back to previous screen.
              @Override
              public boolean onKeyDown(int keyCode, KeyEvent event) 
              {
                  if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
                      web.goBack();
                      return true;
                  }
                  return super.onKeyDown(keyCode, event);
              }
          }
          

          请让我知道它是否有效! :)

          【讨论】:

            【解决方案5】:

            只需在代码中添加以下行

            private class MyWebViewClient extends WebViewClient {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url)
                {
                     view.loadUrl(url);
                    return true;
                }
            
                public void onPageFinished(WebView view, String url) {
                    // TODO Auto-generated method stub
                    super.onPageFinished(view, url);
            
                }
            }
            

            并为您的 webview 设置上面的 webview 客户端,如下所示:

             webView.setWebViewClient(new MyWebViewClient());
            

            【讨论】:

              【解决方案6】:

              试试这个:

              public class MainActivity extends Activity  {
                 Button b1;
                 EditText ed1;
              
                 private WebView wv1;
                 @Override
                 protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
              
                    b1=(Button)findViewById(R.id.button);
                    ed1=(EditText)findViewById(R.id.editText);
              
                    wv1=(WebView)findViewById(R.id.webView);
                    wv1.setWebViewClient(new MyBrowser());
              
                    b1.setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                          String url = ed1.getText().toString();
              
                          wv1.getSettings().setLoadsImagesAutomatically(true);
                          wv1.getSettings().setJavaScriptEnabled(true);
                          wv1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
                          wv1.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.menu_main, menu);
                    return true;
                 }
              
                 @Override
                 public boolean onOptionsItemSelected(MenuItem item) {
                    // Handle action bar item clicks here. The action bar will
                    // automatically handle clicks on the Home/Up button, so long
                    // as you specify a parent activity in AndroidManifest.xml.
              
                    int id = item.getItemId();
              
                    //noinspection SimplifiableIfStatement
                    if (id == R.id.action_settings) {
                       return true;
                    }
                    return super.onOptionsItemSelected(item);
                 }
              }
              

              如需进一步参考,您可以访问以下链接

              http://www.tutorialspoint.com/android/android_webview_layout.htm

              【讨论】:

                猜你喜欢
                • 2017-02-21
                • 2016-02-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-02-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多