簡體   English   中英

鏈接正在webview中打開,我想在android studio中的默認瀏覽器中打開

[英]links are opening in webview i want to open in default browser in android studio

我有一個WebView,我希望當有人單擊某個鏈接時,它應該在瀏覽器中而不是在我的應用程序中打開。 我怎樣才能做到這一點?

我想顯示第一個網頁,但是當有人單擊它時,它應該在我想要的新瀏覽器中打開。 我怎樣才能做到這一點?

這是我正在使用的代碼

package com.packagename.weebly.free_recharge_app;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class tab2 extends Fragment {

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

    View view = inflater.inflate(R.layout.tab2, container, false);

    WebView webView = (WebView) view.findViewById(R.id.webview1);
    webView.getSettings().setSupportZoom(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(true);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);

    // Set cache size to 8 mb by default. should be more than enough
    webView.getSettings().setAppCacheMaxSize(1024*1024*8);
    // This next one is crazy. It's the DEFAULT location for your app's cache
    // But it didn't work for me without this line.
    // UPDATE: no hardcoded path. Thanks to Kevin Hawkins
    //  String appCachePath = this.getCacheDir().getAbsolutePath();
    //  Log.e(TAG, "appCachePath = " + appCachePath);
    // webView.getSettings().setAppCachePath(appCachePath);
    webView.getSettings().setAllowFileAccess(true);

    webView.getSettings().setJavaScriptEnabled(true);

    // Load the URLs inside the WebView, not in the external web browser
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    webView.loadUrl("http://google.com");

    return view;
    }
}

添加代碼@eugene之后

package com.freerechargeapp.weebly.free_recharge_app;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class tab2 extends Fragment {



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

    View view = inflater.inflate(R.layout.tab2, container, false);

WebView webView = (WebView) view.findViewById(R.id.webview1);
    webView.getSettings().setSupportZoom(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(true);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);
    // Set cache size to 8 mb by default. should be more than enough
    webView.getSettings().setAppCacheMaxSize(1024*1024*8);
    // This next one is crazy. It's the DEFAULT location for your app's     cache
    // But it didn't work for me without this line.
    // UPDATE: no hardcoded path. Thanks to Kevin Hawkins
  //  String appCachePath = this.getCacheDir().getAbsolutePath();
  //  Log.e(TAG, "appCachePath = " + appCachePath);
   // webView.getSettings().setAppCachePath(appCachePath);
    webView.getSettings().setAllowFileAccess(true);

    webView.getSettings().setJavaScriptEnabled(true);



    // Load the URLs inside the WebView, not in the external web browser
    webView.setWebViewClient(new WebViewClient(){

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url){
            view.loadUrl(url);
            return false;
        }
    });

    webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    webView.loadUrl("google.com");

    return view;



}




}

只需刪除webView.setWebViewClient(new WebViewClient());

或添加

webView.setWebViewClient(new WebViewClient(){

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
      view.loadUrl(url);
      return false;
    }
});

1)在活動中添加課程。

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

2) setWebViewClient與新創建的類。 您已經有一個,應該刪除並替換為以下內容。

webView.setWebViewClient(new AppWebViewClient());

來自

當用戶單擊WebView中網頁上的鏈接時, 默認行為是Android啟動處理URL的應用程序。 通常,默認的Web瀏覽器會打開並加載目標URL。

默認行為是,當在WebView中單擊鏈接時,Android會使用Intent.ACTION_VIEW啟動它。 通過向WebView提供WebViewClient可以更改默認行為

只需刪除您提供給WebView的WebViewClient,您的應用即可使用默認流程。

您代碼中的注釋告訴您,這將不會在新鏈接中打開代碼。

// Load the URLs inside the WebView, not in the external web browser
webView.setWebViewClient(new WebViewClient());

您需要重寫方法shouldOverrideUrlLoading。

webView.setWebViewClient(new WebViewClient(){

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
  view.loadUrl(url);
  return false;
}
});

返回值true表示宿主應用程序處理URL,而返回false表示當前WebView處理URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM