Android关于webview的开发心得(笔记(二)解决webview的重定向、加载https网页)

本文分享了Android WebView开发的经验,包括解决重定向问题、加载HTTPS网页的白屏问题,并提供了WebView配置的复用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android关于webview的开发心得(笔记(二)解决webview的重定向、加载https网页)

关于

  本篇主要是一些常用webview的设置的复用编写(包括常用加载H5页面的配置、重定向问题解决得配置)。第二个就是解决加载https网页的白屏问题。在上一篇的项目上,我们进行修改优化。
当然啦,我的开源库webloading已经解决了绝大部分的webview使用问题,详情见WebLoading开源库,支持https访问

第一步,新增WebViewSettings.java

我们先写一个webview的一些配置的复用方法,以便多个模块、多个页面调用webview的复用:

public class WebViewSettings {

   static Context mContext;
   static Dialog mDialog;
   public static void SetWebSettings(WebView webView, String url, Dialog dialog){
       WebSettings webSettings = webView.getSettings();
       webSettings.setSupportZoom(true);
       webSettings.setUseWideViewPort(true);
       webSettings.setAllowFileAccess(true); //这里是支持文件操作,比如从相册等选取图片
       webSettings.setDefaultTextEncodingName("utf-8");
       webSettings.setLoadsImagesAutomatically(true);
       //  webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //自适应屏幕
       webSettings.setLoadWithOverviewMode(true);
       //   webSettings.setBuiltInZoomControls(true); //设置是否出现缩放工具
       webSettings.setJavaScriptEnabled(true);//设置调用JS方法
       saveData(webSettings);
       newWin(webSettings);
       mDialog = dialog;
       webView.setWebChromeClient(webChromeClient);
       webView.setWebViewClient(webViewClient);
       webView.loadUrl(url);
   }

    static WebViewClient webViewClient = new WebViewClient(){
       @Override
       public void onPageFinished(WebView view, String url) {
           super.onPageFinished(view, url);
           //下一篇将会使用进度条代替这个,进一步优化用户体验感
           DialogUtil.closeDialog(mDialog);
       }
       

        /**
         * 解决重定向
         * 多页面在同一个WebView中打开,就是不新建activity或者调用系统浏览器打开
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    };

   static WebChromeClient webChromeClient = new WebChromeClient(){
       @Override
       public void onProgressChanged(WebView view, int newProgress) {
           super.onProgressChanged(view, newProgress);
           //这里放进度条,下一篇将会使用进度条展示取代加载框提示
       }

       @Override
       public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
           WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
           transport.setWebView(view);
           resultMsg.sendToTarget();
           return true;
       }
   };

    /**
     * 多窗口的问题
     */
    private static void newWin(WebSettings webSettings) {
        //html中的_bank标签就是新建窗口打开,有时候会打不开,需添加如下
        webSettings.setSupportMultipleWindows(false);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        //然后 复写 WebChromeClient的onCreateWindow方法
    }

    /**
     * HTML5数据存储
     */
    private static void saveData(WebSettings webSettings) {
        mContext = App.getInstance();
        //有时候网页需要自己保存一些关键数据,Android WebView 需要自己设置
        webSettings.setDomStorageEnabled(true);
        webSettings.setDatabaseEnabled(true);
        webSettings.setAppCacheEnabled(true);
        String appCachePath = mContext.getApplicationContext().getCacheDir().getAbsolutePath();
        webSettings.setAppCachePath(appCachePath);
    }
}

第二步,修改MainActivity.java

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    Dialog mDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        mDialog = DialogUtil.createLoadingDialog(this,"加载中...");
       String url = "https://blog.youkuaiyun.com/tobey_r1";
        WebViewSettings.SetWebSettings(webView,url,mDialog);
    }
}

效果图

在这里插入图片描述

问题

加载框消失时机和网址内容展现不符,下一篇将介绍进度条使用。以及一些去广告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值