Skip to content

Commit

Permalink
跳到第三方应用的弹框支持自定义
Browse files Browse the repository at this point in the history
  • Loading branch information
liuchengcheng committed Dec 22, 2020
1 parent 3e16dcc commit 9ec98c1
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,26 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.net.http.SslError;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;

import com.example.a_webview.R;
import com.example.a_webview.inter.ReShouldOverrideUrlLoadListener;
import com.example.a_webview.inter.onOpenThreeListener;
import com.example.a_webview.utils.LogUtils;


public class MyWebViewClient extends BaseWebViewClient {
private Context mContext;
private ReShouldOverrideUrlLoadListener mRedefineUrl;//自定义拦截操作
private onOpenThreeListener onOpenThreeListener;

public MyWebViewClient() {
}
Expand Down Expand Up @@ -69,24 +74,31 @@ public void onClick(DialogInterface dialog, int which) {
}).show();
return true;
} else {
message = "即将离开「万顺叫车」,打开第三方应用";
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext).setIcon(android.R.drawable.ic_dialog_info)
.setTitle("提示")
.setMessage(message)
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mContext.startActivity(intent);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = dialogBuilder.create();
dialog.show();
if (onOpenThreeListener != null) {
onOpenThreeListener.showDialog(intent);//自定义弹框
} else {
message = "即将离开App,打开第三方应用";
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext).setIcon(android.R.drawable.ic_dialog_info)
.setTitle("提示")
.setMessage(message)
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mContext.startActivity(intent);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = dialogBuilder.create();
dialog.show();
//弹框设置字体颜色
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.parseColor("#fe9949"));
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.parseColor("#333333"));
}
}
}
} catch (Exception e) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
Expand Down Expand Up @@ -124,12 +136,17 @@ public static Builder createBuilder() {
public static class Builder {
private Context mContext;
private ReShouldOverrideUrlLoadListener mRedefineUrl;
private onOpenThreeListener onOpenThreeListener;

public Builder setContext(Context mContext) {
this.mContext = mContext;
return this;
}

public Builder setOpenThreeListener(onOpenThreeListener onOpenThreeListener) {
this.onOpenThreeListener = onOpenThreeListener;
return this;
}

public Builder setReShouldOverrideUrlLoading(ReShouldOverrideUrlLoadListener mRedefineUrl) {
this.mRedefineUrl = mRedefineUrl;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.a_webview.inter;

import android.content.Intent;

public interface onOpenThreeListener {
void showDialog(Intent intent);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.example.a_webview.components.ProgressTitleChromeClient;
import com.example.a_webview.inter.ProgressListener;
import com.example.a_webview.inter.ReShouldOverrideUrlLoadListener;
import com.example.a_webview.inter.onOpenThreeListener;
import com.example.a_webview.inter.onPhotoDialogListener;
import com.example.a_webview.inter.onProgressCountListener;
import com.example.a_webview.inter.onTitleReceiveListener;
Expand All @@ -27,6 +28,7 @@ public class AWebViewWrapper {
private Context mContext;
//自定义拦截操作
private ReShouldOverrideUrlLoadListener mRedefineUrl;
private onOpenThreeListener onOpenThreeListener;
private AWebView mWebView;
private WebChromeClient mWebChromeClient;
private WebViewClient mWebViewClient;
Expand Down Expand Up @@ -58,6 +60,7 @@ public AWebViewWrapper(Builder mBuilder) {
this.mView = mBuilder.mView;
this.onPhotoDialogListener = mBuilder.photoDialogListener;
this.mProgressColor = mBuilder.mProgressColor;
this.onOpenThreeListener = mBuilder.onOpenThreeListener;
init();
}

Expand Down Expand Up @@ -95,6 +98,7 @@ private void init() {
MyWebViewClient mClient = MyWebViewClient.createBuilder()
.setContext(mContext)
.setReShouldOverrideUrlLoading(mRedefineUrl)
.setOpenThreeListener(onOpenThreeListener)
.getWebViewClient();
mWebView.setmBaseWebViewClient(mClient);
}
Expand Down Expand Up @@ -156,6 +160,7 @@ public static class Builder {
private View mView;
private int mProgressColor;
private onPhotoDialogListener photoDialogListener;
private onOpenThreeListener onOpenThreeListener;

public Builder setPhotoDialogListener(com.example.a_webview.inter.onPhotoDialogListener photoDialogListener) {
this.photoDialogListener = photoDialogListener;
Expand Down Expand Up @@ -219,6 +224,12 @@ public Builder setProgressColor(int mProgressColor) {
return this;
}

public Builder setOpenThreeListener(onOpenThreeListener onOpenThreeListener) {
this.onOpenThreeListener = onOpenThreeListener;
return this;

}

public AWebViewWrapper getAWebViewWrapper() {
return new AWebViewWrapper(this);
}
Expand Down
30 changes: 28 additions & 2 deletions app/src/main/java/com/example/awebview/WebViewImlActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
Expand All @@ -24,6 +25,7 @@
import androidx.core.content.ContextCompat;

import com.example.a_webview.components.PhotoWebChromeClient;
import com.example.a_webview.inter.onOpenThreeListener;
import com.example.a_webview.inter.onPhotoDialogListener;
import com.example.a_webview.web.AWebView;
import com.example.a_webview.web.AWebViewWrapper;
Expand Down Expand Up @@ -101,8 +103,32 @@ public boolean interceptProcess(WebView wv, String url) {
return false;
}
}
})
.getAWebViewWrapper();
}).setOpenThreeListener(new onOpenThreeListener() {
@Override
public void showDialog(final Intent intent) {
String message = "即将离开「万顺叫车」,打开第三方应用";
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(WebViewImlActivity.this).setIcon(android.R.drawable.ic_dialog_info)
.setTitle("提示")
.setMessage(message)
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(intent);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = dialogBuilder.create();
dialog.show();
//弹框设置字体颜色
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.parseColor("#fe9949"));
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.parseColor("#333333"));
}
}).getAWebViewWrapper();

}

Expand Down

0 comments on commit 9ec98c1

Please sign in to comment.