云音乐_实现隐私协议对话框(三)
要点总结
- 整体实现思路
- 封装DialogFragment基类
- 实现隐私协议对话框的布局
- 对协议内容中的链接设置可点击
- 同意和拒绝按钮点击事件的实现
整体实现思路
当启动页出现的时候,隐私协议需要作为启动页关联的fragment出现。
- 类的位置:隐私协议是启动页的一部分,应该存放在启动页对应的fragment包下
- 实现思路:在启动页初始化数据的时候,调用下fragment展示,并且设置一个按钮view的监听
- 步骤一:封装一个DialogFragment基类,类似activity的封装
- 步骤二:实现fragment的布局
- 步骤三:在子类中实现对应的数据处理、颜色设置、点击事件,拒绝直接退出app,同意,则回调到启动页继续接下来的逻辑
封装DialogFragment基类
DialogFragment是Android系统提供的一种特殊的Fragment,用于创建对话框式的交互界面,它可以将对话框和Fragment的生命周期进行关联。
初始化操作
这里在onViewCreated方法中进行数据的初始化操作,该方法在onCreateView方法后面调用,表示该Fragment视图已经被创建完成并添加到Activity的视图层次结构中,对应fragment的生命周期是onActivityCreated方法。
注:在DialogFragment中,onActivityCreated()方法可能在视图创建之前就被调用,因此如果在该方法中需要使用到视图对象,则需要进行非空判断。此外,如果使用了setRetainInstance(true)保留实例状态,那么onViewCreated()方法只会被调用一次。
/*** View创建了** @param view* @param savedInstanceState*/@Overridepublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);initViews();initDatum();initListeners();}
返回对话框界面
onCreateView()是DialogFragment生命周期中的一个回调方法,用于创建该DialogFragment的用户界面。在该方法中,需要返回一个View对象,作为当前DialogFragment的用户界面。第三个参数root表示是否添加该视图到container中。在DialogFragment中,这个参数通常为false,因为DialogFragment自己会管理并显示该视图。
注:如果你想要自定义DialogFragment的样式,可以重写其onCreateDialog()方法而非onCreateView()方法。
@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {//获取viewView view = getLayoutView(inflater,container,savedInstanceState);//返回viewreturn view;}/*** 获取view** @param container* @param savedInstanceState* @return*/protected abstract View getLayoutView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);//获取视图的实现@Overrideprotected View getLayoutView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_dialog_term_service, container, false);}
封装一个findViewById方法
/*** 给fragment增加findViewById** IdRes表示只能传 R.id这种类型的int类型数据*/public <T extends View> T findViewById(@IdRes int id) {return getView().findViewById(id);}
实现隐私协议对话框的布局
主要组成:标题,滚动文本,按钮
“?attr/” 是一个资源类型前缀,表示要引用主题中的属性值。
<!--#000000-->
android:textColor="?attr/colorOnSurface"
<!--行间距-->
android:lineSpacingMultiplier="@dimen/line_space"
<!--圆角弧度-->
app:cornerRadius="@dimen/d27_5"
<!--设置无边框透明-->
style="?android:attr/borderlessButtonStyle"
调整布局的宽高:
//修改宽度,默认比AlertDialog.Builder显示对话框宽度窄,看着不好看//参考:https://stackoverflow.com/questions/12478520/how-to-set-dialogfragments-width-and-heightViewGroup.LayoutParams params = getDialog().getWindow().getAttributes();params.width = (int) (ScreenUtil.getScreenWith(getContext()) * 0.9);params.height = ViewGroup.LayoutParams.WRAP_CONTENT;getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
对协议内容中的链接设置可点击
防止弹窗外依旧可以点击:
//点击弹窗外边就不会关闭setCancelable(false);
将协议文本设置为富文本,设置富文本才可以点击,并且设置颜色:
//设置富文本
view.setMovementMethod(LinkMovementMethod.getInstance());
//链接的颜色
view.setLinkTextColor(color);
对Html文本进行格式化处理(此文本已经被设置成富文本),然后调用工具类,获取url的spans,遍历该spans,设置监听,回调到result即可得到点击事件:
Spanned content = Html.fromHtml(getString(R.string.term_service_privacy_content));SpannableStringBuilder result = SuperTextUtil.setHtmlLinkClick(content, new SuperTextUtil.OnLinkClickListener() {@Overridepublic void onLinkClick(String data) {Log.d(TAG, "onLinkClick: " + data);}});/*** 设置文本点击** @param data* @param listener* @return*/public static SpannableStringBuilder setHtmlLinkClick(Spanned data, OnLinkClickListener listener) {SpannableStringBuilder sb = new SpannableStringBuilder(data);//URLSpan[] spans = sb.getSpans(0, sb.length(), URLSpan.class);for (URLSpan span : spans) {int start = sb.getSpanStart(span);int end = sb.getSpanEnd(span);int flags = sb.getSpanFlags(span);sb.setSpan(new SuperClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {listener.onLinkClick(span.getURL());}}, start, end, flags);}return sb;}
同意和拒绝按钮点击事件的实现
拒绝按钮点击,直接杀掉进程完成退出:
/*** 杀死当前应用*/public static void killApp() {Process.killProcess(Process.myPid());}
同意按钮点击,则回调到启动页的调用,具体实现是,在启动页调用隐私弹窗的时候,去透传一个view的点击监听器,设置为全局变量,然后在同意按钮的点击事件里面嵌套:
primaryView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {onAgreementClickListener.onClick(view);}});
云音乐_实现隐私协议对话框(三)相关推荐
- 局域网arp攻击_图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”...
一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低, ...
- sla的三个服务等级_你知道吗?阿里云最新发布的服务等级协议SLA已领先全球水平...
看到这个标题,懵吗?其实我也懵,但是我搜刮了大量的资料,发现这小数点的背后,实在是不简单.请听我一一道来.事情是这样的,据了解: 2019年12月1日,阿里云ECS发布最新的服务等级协议SLA,单实例 ...
- 案例分享:某品牌音响系列协议调试工具(搜寻主机,查询通道,基本控制API,云音乐API,语言节目API等,可增删改指令)
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115920854 长期持续带来更多项目与技术分 ...
- 为什么tcp不采用停等协议_为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?...
看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章 ...
- Chrome插件:云音乐听歌识曲
当你用网页在视频网站刷视频的时候,有没有碰到过一个 BGM 激起你内心的波澜,而你却不知道它的名字.此时只能打开手机进行听歌识曲,而通过一个浏览器的插件却更容易解决这个问题.不需要繁琐的掏出手机,也不 ...
- 【爬虫+多线程+MySQL】网抑云音乐评论爬取
提示:本文仅作学习交流使用,下面案例可供参考. 文章目录 前言 一.爬取所有华语男歌手姓名及ID 1.网页分析 2.代码实现 3.部分运行结果 附:url详解 二.爬取所有华语男歌手专辑ID 1.网页 ...
- 隐私协议授权访问的实现
目录 交互逻辑 隐私协议的实现 初始化隐私协议 隐私协议确认弹窗 再次确认弹窗 隐私政策&用户协议界面 用户协议界面 隐私政策界面 隐私协议的文档 授权访问的实现 初始化授权访问 授权访问工具 ...
- 安全隐私协议合规的那些事
背景 2020年7月24日,工信部发布了<关于开展纵深推进APP侵害用户权益专项整治行动的通知>(工信部信管函[2020]164号),从发文之日起至2020年12月10日开展APP侵害用户 ...
- 纳斯达克2021科技趋势报告、字节与美国用户达成9200万美元隐私协议、2020 最受欢迎APP|Decode the Week...
Decode the Week ≠音视频技术周刊 Pic from Glasgow Film Festival 2021,More Together. /News Briefing. Roblo ...
最新文章
- php传输数组给axios
- Robot Framework Webdriver For Firefox FQA
- java程序 构建mycircle类_Java语言程序设计(十九)对象和类的应用实例
- 快手 算法工程师 0825 笔试题
- SonarLint黄线警告python:S125
- ztree 右键菜单功能
- python爬虫入门——爬取淘宝商品评论信息
- O365(世纪互联)SharePoint 之使用列表库发布新闻
- 什么是配置文件,以及如何编辑它们?
- JAVA 中大于等于小于的写法
- QQ的常用快捷键大全
- SQL Server 创建学生管理系统
- Jointly Embedding Knowledge Graphs and Logical Rules
- 简洁的旅行青蛙个人主页纯静态HTML
- 导航栏 下拉菜单的制作
- User must be authenticated with Spring Security before authorization can be completed.解决方法
- 大学学习的期望与目标
- 【编译原理】 实验三 LL(1)分析法(LL1分析表的自动生成)
- Hive性能优化(全面)解决数据倾斜等问题
- search engin学习笔记1
热门文章
- matlab常用转义字符表,Matlab字体转义字符
- 学习笔记——PCB 棕化和黑化
- VNWare+MAC+J2Objc+Eclipse 环境配置和搭建---(J2Objc的使用)
- 天然奥兹克蜡的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- VirtualBox 启动虚拟机失败 - NtCreateFile(\Device\VBoxDrvStub)
- 缓存的设计 缓存的例子
- 【FIFO】异步 FIFO 设计
- Linux中打开文件显示行号相关命令
- log4j2 自定义日志级别
- 五大税种,你知道多少?