Android使用隐私弹框

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

编写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() {@Overridepublic void onClick(View v) {clickTiem = SystemClock.elapsedRealtime();tipDialog.dismiss();if (listener != null) {listener.cancleClick();}}});tvsure.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {tipDialog.dismiss();if (listener != null) {listener.sureClick();}}});tipDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {@Overridepublic 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;}@Overridepublic void onClick(@NonNull View widget) {if (listener != null) {if(mNum == 1){listener.userClick();}else {listener.termsClick();}}}@Overridepublic 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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#fff"android:orientation="vertical"><TextViewandroid:id="@+id/tv_sava_dialog_title"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"android:text="@string/tip_title"android:textColor="#bababa"android:textSize="17sp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:id="@+id/ll_read_priavate"android:paddingLeft="@dimen/dp_20"android:paddingRight="@dimen/dp_20"><TextViewandroid:id="@+id/tv_sava_dialog_message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="欢迎使用XXXXXXXXXX!在您使用前,请您认真阅读《用户服务协议》和《隐私政策》,以了解我们的服务内容和我们在收集和使用您相关个人信息时的处理规则"android:textColor="#bababa"android:layout_marginBottom="18dp"android:textSize="@dimen/sp_15" /></LinearLayout></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_sava_dialog_cancel"android:layout_width="0dp"android:layout_height="50dp"android:layout_marginTop="1dp"android:layout_weight="1"android:background="#a1a1a1"android:clickable="true"android:foreground="?android:selectableItemBackground"android:gravity="center"android:text="@string/cancel"android:textColor="#867575"android:textSize="15sp" /><TextViewandroid:id="@+id/tv_sava_dialog_confirg"android:layout_width="0dp"android:layout_height="50dp"android:layout_marginLeft="1dp"android:layout_marginTop="1dp"android:layout_weight="1"android:background="#a1a1a1"android:clickable="true"android:foreground="?android:selectableItemBackground"android:gravity="center"android:text="@string/confirm"android:textColor="#efebeb"android:textSize="15sp" /></LinearLayout></LinearLayout></LinearLayout>

如何使用

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

PrivateDialog.getInstace().message("").sure("同意").cancle("退出应用").setOnTipItemClickListener(new PrivateDialog.OnTipItemClickListener() {@Overridepublic void cancleClick() {finishAffinity();}@Overridepublic void sureClick() {//进入app}@Overridepublic void userClick() {//跳转至用户服务协议toActivity(ProtocolActivity.class);}@Overridepublic void termsClick() {//跳转至隐私政策toActivity(TermActivity.class);}}).create(this);

git地址

隐私弹框Demo git地址

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

Android隐私弹框相关推荐

  1. android 底部弹框 BottomSheetDialog 的使用

    先简单的说下普通弹框使用 步骤 首先项目需要添加design 库 简单的使用和dialog 一样 如下 BottomSheetDialog sheelt = new BottomSheetDialog ...

  2. 考拉Android统一弹框

    背景 在快速开发的背景下,经历了n个版本后的Android App中已经存在了各种各样看似相同却各有差别的弹框样式.其中包括系统弹框和自定义弹框,并且在线上时常会出现IllegalArgumentEx ...

  3. 非静默授权没有弹出弹框_网易考拉Android统一弹框

    作者:钱成杰 链接:https://blog.csdn.net/jessicaiu/article/details/82739334 背景 在快速开发的背景下,经历了n个版本后的考拉Android A ...

  4. Android 自定义 弹框日期选择器 弹框,年月日,时分,

    之前有个项目要用到 日期选择器,于是百度了有关 方法,自己 将其 封装成了 自定义 控件 项目 地址:点击打开链接 效果图 Android 自带 的 日期选择器和时间选择器 为DatePicker 和 ...

  5. android自动化测试弹框,干货 | App 自动化测试痛点(弹框及首页启动加载完成判断处理)...

    原标题:干货 | App 自动化测试痛点(弹框及首页启动加载完成判断处理) 1. 常见痛点 App 自动化测试中有些常见痛点问题,如果框架不能很好的处理,就可能出现元素定位超时找不到的情况,自动化也就 ...

  6. Android Dialog 弹框之外的区域 默认透明背景色修改

    就是下面弹框之外的颜色值 透明度修改 一般弹框外的区域的不是全透明  都有一个默认的值使用的属性为 setDimAmount 这个默认值是0.5 这个值的范围在 0-1 之间 如果设置为1 就是全黑色 ...

  7. android fragment 弹出对话框,Android DialogFragment弹框实现

    前言: 网上说了一堆好处,我只说自己深有体会的两点吧 1.屏幕横竖屏切换的时候,弹框可以保存状态 2.可以在popwindow中使用 使用步骤 1.创建继承DialogFragment的dialogF ...

  8. Android PopupWindow 弹框布局要显示在某个空间下面位置

    说明: 弹框布局要显示在某个空间下面需求.使用PopupWindow 弹框控件. 代码: 使用PopupWindow. 1.PopupWindow初始化 private PopupWindow pop ...

  9. android 系统弹框与自定义弹框

    1. 系统弹框 private AlertDialog alertDialog; private void tipDialog(String value) {         if (alertDia ...

最新文章

  1. android 处理双击事件
  2. 服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
  3. hadoop运行wordcount实例,hdfs简单操作
  4. MyEclipse编码设置
  5. 教你Java 代码性能优化小妙招,速速来看
  6. linux dig命令
  7. 翻译:SWFObject 2.0官方文档
  8. Qt QLineEdit QLabel 添加clicked事件
  9. 网站如何统计访问人数?51LA如何安装使用?
  10. dango One2Many example
  11. npm --save 的含义
  12. 为什么微软是数字时代的领头羊?
  13. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
  14. 写一个自动回复的聊天机器人
  15. pygame安装(2020版超详细)
  16. 1688API接口seller_info - 获得店铺详情
  17. Proteus仿真Arduino MEGA开发板的GPS模块
  18. 腾讯哈勃_前5名:哈勃,业力,树莓派,午夜指挥官等
  19. 医学检验质量管理和控制计算机的,【临床医学论文】临床医学检验技术质量管理现状分析(共4169字)...
  20. 宝宝树CEO王怀南上市前夕内部信:市场需要有价值的好公司

热门文章

  1. Terracotta2
  2. linux无法识别hd4600,HD4600 只有7M 怎么破hd4600
  3. Unity中实现雷达图
  4. 金三银四,金九银十,2020年PHP面试知识点,让涨薪成为现实
  5. 个人总结学 iOS 开发的15条经验
  6. java窗口背景颜色的设定----setBackground()的用法
  7. 解决 Syntax Error Error PostCSS received undefined instead of CSS string
  8. cookie.getMaxAge()的-1是什么意思
  9. java读取excel(java读取excel表格存入数据库)
  10. PostgreSQL 表 行数统计