之前选毕设图简单,随便从网上找了个安卓的天气预报软件就写上去了,结果实习之后全都是做的服务器端,对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