Android使用隐私弹框

  • 编写Android的APP进去点击的用户隐私弹框
    • 效果图
    • java代码
    • xml布局界面
    • 如何使用
    • 本次弹框分享到此结束,喜欢的点个赞,谢谢大家啦

编写Android的APP进去点击的用户隐私弹框

因为现在发布APP现在都需要在发布前生成一个用户隐私弹框让用户点击,所以手写了一个用以使用

效果图

java代码

public class PrivateDialog {    private static PrivateDialog instace;    public PrivateDialog() {    }    public static PrivateDialog getInstace() {        if (instace == null) {            synchronized (PrivateDialog.class) {                if (instace == null) {                    instace = new PrivateDialog();                }            }        }        return instace;    }    private String title = "温馨提示";    private String message;    private String sure;    private String cancle;    private Dialog tipDialog;    private float clickTiem = 0;    /**     * desc: 提示隐私协议框     */    public void showConnectDialog(Context mContext) {        dismiss();        if ((SystemClock.elapsedRealtime() - clickTiem) < 500) {            return;        }        tipDialog = new AlertDialog.Builder(mContext).create();        tipDialog.setCanceledOnTouchOutside(false);        View view = LayoutInflater.from(mContext).inflate(R.layout.activity_private_dialog, null, false);        TextView tvTitle = view.findViewById(R.id.tv_sava_dialog_title);        TextView dialogTxt = view.findViewById(R.id.tv_sava_dialog_message);        TextView tvcancle = view.findViewById(R.id.tv_sava_dialog_cancel);        TextView tvsure = view.findViewById(R.id.tv_sava_dialog_confirg);        SpannableStringBuilder tvProtocol = new SpannableStringBuilder(dialogTxt.getText().toString());        tvProtocol.setSpan(new CliclSpan(mContext,1),27,35,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);        tvProtocol.setSpan(new CliclSpan(mContext,2),36,42,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);        dialogTxt.setText(tvProtocol);        dialogTxt.setMovementMethod(LinkMovementMethod.getInstance());        if (!this.title.isEmpty()) {            tvTitle.setText(this.title);        }        if (!this.message.isEmpty()) {//            tvMsg.setText(this.message);        }        if (!this.cancle.isEmpty()) {            tvcancle.setText(this.cancle);        }        if (!this.sure.isEmpty()) {            tvsure.setText(this.sure);        }        view.findViewById(R.id.tv_sava_dialog_cancel).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                clickTiem = SystemClock.elapsedRealtime();                tipDialog.dismiss();                if (listener != null) {                    listener.cancleClick();                }            }        });        tvsure.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                tipDialog.dismiss();                if (listener != null) {                    listener.sureClick();                }            }        });        tipDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {            @Override            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {                if (keyCode == KeyEvent.KEYCODE_SEARCH)                {                    return true;                }                else                {                    return false; //默认返回 false                }            }        });        tipDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);        tipDialog.show();        tipDialog.setCancelable(false);        tipDialog.getWindow().setContentView(view);        //tipDialog.getWindow().setWindowAnimations(R.style.DialogBottom); // 添加动画        WindowManager windowManager = (WindowManager)                mContext.getSystemService(Context.WINDOW_SERVICE);        Display display = windowManager.getDefaultDisplay();        WindowManager.LayoutParams params = tipDialog.getWindow().getAttributes();        params.width = (int) (display.getWidth() * 0.8);        tipDialog.getWindow().setAttributes(params);    }    public void dismiss() {        if (tipDialog != null) {            if (tipDialog.isShowing()) {                tipDialog.dismiss();            }            tipDialog = null;        }    }    public interface OnTipItemClickListener {        void cancleClick();        void sureClick();        void userClick();        void termsClick();    }    private OnTipItemClickListener listener;    public PrivateDialog setOnTipItemClickListener(OnTipItemClickListener listener) {        this.listener = listener;        return this;    }    public PrivateDialog title(String title) {        this.title = title;        return this;    }    public PrivateDialog message(String message) {        this.message = message;        return this;    }    public PrivateDialog sure(String sure) {        this.sure = sure;        return this;    }    public PrivateDialog cancle(String cancle) {        this.cancle = cancle;        return this;    }    public void create(Context mContext) {        showConnectDialog(mContext);    }    class CliclSpan extends ClickableSpan{        Context mContext;        Integer mNum;        public CliclSpan() {            super();        }        public CliclSpan(Context context,Integer num) {            mContext = context;            mNum = num;        }        @Override        public void onClick(@NonNull View widget) {            if (listener != null) {                if(mNum == 1){                    listener.userClick();                }else {                    listener.termsClick();                }            }        }        @Override        public void updateDrawState(@NonNull TextPaint ds) {            ds.setColor(ContextCompat.getColor(mContext,R.color.red));            ds.setUnderlineText(false);        }    }}

xml布局界面

xml文件名:activity_private_dialog

<?xml version="1.0" encoding="utf-8"?>                                                                                                                

如何使用

服务协议与隐私政策的Activity我就不贴出来了,有需要可以找我要

PrivateDialog.getInstace().message("").sure("同意").cancle("退出应用")                    .setOnTipItemClickListener(new PrivateDialog.OnTipItemClickListener() {                        @Override                        public void cancleClick() {                            finishAffinity();                        }                        @Override                        public void sureClick() {//进入app                        }                        @Override                        public void userClick() {//跳转至用户服务协议                            toActivity(ProtocolActivity.class);                        }                        @Override                        public void termsClick() {![在这里插入图片描述](https://img-blog.csdnimg.cn/23138f9cd70548c2b8eb36547a10fc98.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pep5pma6YGH6KeB5L2g,size_8,color_FFFFFF,t_70,g_se,x_16#pic_center)//跳转至隐私政策                            toActivity(TermActivity.class);                        }                    }).create(this);

本次弹框分享到此结束,喜欢的点个赞,谢谢大家啦

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android通过http协议POST传输方式
  6. Android之SeekBar的简单使用
  7. 在Android中使用FFmpeg(android studio环境) 合成音频与视频
  8. android 基本架构
  9. Android(安卓)Studio 2.3 更新小记

随机推荐

  1. 手机管理应用研究【4】—— 手机加速篇
  2. ComScore:Android(安卓)以 44% 在美国智能
  3. Android(安卓)studio启动后卡在refreshin
  4. apk反编译和重新打包
  5. MonoDroid学习笔记(一)―― 搭建MonoDroid
  6. Google+ 手機App中文介面新登場, Android
  7. Android开发学习指南,同时庆祝第二款手机
  8. Android下DLNA开发简介
  9. Android使用huffman编码进行图片压缩
  10. 【Android(安卓)学习记录】:针对Android(