Android中webview在AlertDialog中白屏的问题

之前选毕设图简单,随便从网上找了个安卓的天气预报软件就写上去了,结果实习之后全都是做的服务器端,对web端的兴趣也比客户端要大。。。。
现在就是后悔,非常的后悔。
感觉单一的天气预报太简单,想了想决定加个登陆的功能,然后就可以把大部分东西都引到web端了,想了想决定搞个悬浮窗登陆,搞成sdk,之后没准还用得上。

·····················································································································

计划是在点击完悬浮窗后弹出登陆界面,登陆完成后再次进行点击将会弹出用户界面。这个用户界面是打算用webview来显示网页,然后网页部分就去web端来细做。但是出现一个问题,就是webview加进AlertDialog里,调用builder.show();之后的弹窗在模拟器里是白屏的。

这是原代码:

        builder = new AlertDialog.Builder(this);
        View view = getLayoutInflater().inflate(R.layout.activity_main, null);
        WebView webView = (WebView)view.findViewById(R.id.webok);
        webView.setWebViewClient(new WebViewClient() {
                                      @Override
                                      public boolean shouldOverrideUrlLoading(WebView view, String url) {
                                          view.loadUrl(url);
                                          return true;
                                      }
                                      @Override
                                      public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                                          handler.proceed();    //表示等待证书响应
                                          // handler.cancel();      //表示挂起连接,为默认方式
                                          // handler.handleMessage(null);    //可做其他处理
                                      }
                                      //设置加载前的函数
                                      @Override
                                      public void onPageStarted(WebView view, String url, Bitmap favicon) {
                                          Log.d("webview","开始加载了");

                                      }
                                      //设置结束加载函数
                                      @Override
                                      public void onPageFinished(WebView view, String url) {
                                          Log.d("webview","结束加载了");
                                      }
                                  });
        webView.loadUrl("http://www.baidu.com/");
        builder.setView(view);
        builder.setPositiveButton("取消", null);
        builder.show();

逻辑上看是没有问题,但是就是白屏。单纯的一个activity装配xml布局就没问题。之后百度了一圈,什么配置文件里添加https关于9.0的适配,什么有关webview的缓存设置。试了一遍,还是白屏。
后来用api28的模拟器用,发现在第一次点击时是白屏,但是第二次点击就能出来了。又换了24和27的,怎么点都是白屏。
最后想到了之前在写悬浮窗的时候,也是在代码里直接写加载,无法加载出来悬浮窗。后来写了1秒的延时就出来了。于是在代码里加了2秒的加载延时,再次进行点击就没问题了。但是每次点击后2秒才出来有点不太合适,于是将show写在了网页加载完成的回调里。就ok了。

        builder = new AlertDialog.Builder( context );
        View view = context.getLayoutInflater().inflate( R.layout.webok, null );
        //View view = View.inflate( context,R.layout.webok,null );
        //View view = LayoutInflater.from( context ).inflate( R.layout.webok, null);
        WebView mwebView = (WebView) view.findViewById( R.id.webok );
        initwebview( mwebView );
        mwebView.loadUrl( "https://m.baidu.com" );
        mwebView.setWebViewClient( new WebViewClient() {
                                       @Override
                                       public boolean shouldOverrideUrlLoading(WebView view, String url) {
                                           view.loadUrl( url );
                                           return true;
                                       }

                                       @Override
                                       public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                                           handler.proceed();    //表示等待证书响应
                                           // handler.cancel();      //表示挂起连接,为默认方式
                                           // handler.handleMessage(null);    //可做其他处理
                                       }

                                       //设置加载前的函数
                                       @Override
                                       public void onPageStarted(WebView view, String url, Bitmap favicon) {
                                           Log.d( "悬浮窗", "开始加载了" );

                                       }

                                       //设置结束加载函数
                                       @Override
                                       public void onPageFinished(WebView view, String url) {
                                           //super.onPageFinished( view, null );
                                           builder.show();
                                           Log.d( "悬浮窗", "结束加载了" );
                                       }
                                   }
        );
        builder.setPositiveButton( "取消", null );
        builder.setView( view );
        Toast.makeText( context, "登陆成功", Toast.LENGTH_SHORT ).show();

可能是由于模拟器联网比较差,在加载webview的时候比较慢,之后show的时候因为webview没有数据,所以就是白屏。于是将show写在网络完成回调里就好了。

以下是github地址,欢迎各位大佬提建议。。。。
https://github.com/674197141/loginsdk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值