android自定义push通知_Android自定义Notification的一些坑

第一次在简书发文章,有问题多指教

本篇介绍自定义通知样式时会遇到的一些坑,本篇旨在记录坑,而不在全面讲解自定义的方法

文字颜色:强烈使用系统定义的文字颜色,否则需要固定背景色

自定义View的尺寸: 建议自适应,因为不同系统高度会有差别

不同系统版本的兼容性处理

详细讲解

文字颜色

首先一个大前提,通知栏的背景色的颜色是不确定的,有深色,也有浅色。

这里分两种情况说明。

一种是自定义布局的背景色固定,这种情况下可以直接指定文字颜色。但是这种在通知栏的观感不是很好,比如浅色通知栏,显示一条黑色通知显得很突兀,也不好看。

第二种是透明背景色,这时文字颜色就不能固定了,好在系统提供的对应的文字样式。

原生系统提供了通知栏的适配样式,这个样式会保证在通知栏的文字颜色一直是正常可见的。

某些定制系统使用了系统提供的样式还是会有问题,比如小米6.0的某个版本。其他定制系统也类似,后面有详细讨论

下面先说下如何使用系统样式来适配

由于5.0引入MeterialDesign,5.0及以上的样式命名有所更改,所以需要分别设置。

SDK21以下

values/style.xml

标题样式

android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent.Title"

文字颜色:

android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent"

SDK21及以上

标题颜色

android:textAppearance="@android:style/TextAppearance.Material.Notification.Title"

内容颜色

android:textAppearance="@android:style/TextAppearance.Material.Notification.Info"

注意:

上面的解决方案在实际使用中发现小米的6.0MRA58K版本是暗色通知栏,会导致颜色适配失效,经研究此版本系统样式采用的仍然是21以下的样式配置。 这就造成小米和原生系统的适配冲突。

最终经过研究有以下方案可以解决

1,为小米手机做适配,单独写一套小米的适配样式布局。通过判断手机型号来适配,但是有个比较大的缺点就是如果其他系统也有类似问题那么需要长时间收集各种机型增加判断条件来适配。这一个积累工作,长期劳心劳神

2,直接不设置文字颜色,这样的适应性会比较广一些,但是在小米手机上对某些奇葩一点的主题也可能会导致文字与背景同色

3,再就是上面说的设置固定的背景色,不过据网上了解有些系统也会忽略自定义的背景色,这个倒是可以通过图片来解决,详细的就没做深入探究。

我能说最终还是选择了不设置文字颜色来解决的么...吐槽一下定制系统。

自定义View的尺寸

首先Android原生系统中定义的样式大致有两种,一是普通通知,另一种是4.1以后引入的扩展通知

普通通知高度为64dp,扩展通知高度为256dp。但是由于国内不同定制系统对这两种高度有不同处理,所以推荐使用自适应的布局,尽量不要固定宽高。

至于通知的宽度,不只受屏幕宽度影响,也受自制系统影响。比如华为系统的通知左侧会有时间轴、小米和魅族系统左右会预留padding空间等等。

所以尺寸上尽量做到自适应。

不同系统版本的兼容

扩展布局只支持4.1以上系统,对于4.1以下,可以只设置普通视图的布局。

对于7.0以上系统一定不要直接使用notification.bigContentView来设置布局,此方法早已废弃,尤其7.0以后bigContentView可能为空值

一些代码细节

创建通知可以使用v4包中的NotificatoinCompat.Builder,以兼容11以下版本。

设置自定义布局推荐同时设置普通状态和扩展状态的布局,否则有些手机会出现 Bad Notification Exception

builder.setCustomContentView(buildNormalView(pushMessage));

builder.setCustomBigContentView(buildNoImgView(pushMessage));

Android系统提供的富媒体样式

上面说的都是自定义样式,这里顺便提一下系统目前提供的样式。

在4.1以下,只有标准模式,就是包含图标、标题、文字的基本样式。

4.1及以上增加了扩展视图,提供了BigText,BigImage两种样式

BigText: 在原有标准样式的基础上增大了内容文字的区域,可以容纳大量文字

BigImg: 在原有基础上扩展开之后会将图标展示为大图的样式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微软官方文档】应用程序错误处理

https://docs.microsoft.com/zh-cn/windows/win32/debugging-and-error-handling

【转】在WPF中自定义控件

周银辉的开发博客(WPF) 在WPF中自定义控件(1) 一, 不一定需要自定义控件 在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样式就可以了.是否需要我们…

二叉树前序中序后序javascript_JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】...

本文实例讲述了JavaScript数据结构与算法之二叉树遍历算法。分享给大家供大家参考,具体如下:javascript数据结构与算法--二叉树遍历(先序)先序遍历先访问根节点, 然后以同样方式访问左子树和右子树代码如下:/**二叉树中&#xff0…

Windows上快速在指定目录打开cmd.exe命令行的方法

前言 命令行在项目开发中使用频率很高,在指定目录中打开命令行也是很常见的需求,本文将介绍几种快速在指定目录打开cmd.exe命令行的方法,提高效率。 普通方式 运行->输入cmd.exe,点击确定,打开cmd.exe。 在cmd.…

【转】WPF默认控件模板的获取和资源词典的使用

一、获取默认的控件模板 WPF修改控件模板是修改外观最方便的方式,但是会出现不知道原来的控件的模板长什么样,或者如何在原有控件模板上修改的,下面就分享了获取某控件默认控件模板的方法(以控件Button为例)&#xff…

python设置默认密码_使用Python生成随机密码的示例分享

生成随机密码这件事情用python来干确实相当的方便,优美的string方法加上choice简直是绝配make_password.py###简单几行代码执行即可生成记不住的字符串###$ python make_passwd.pyDLrw9EiTQs4Wm84qRQwl4L2Lu9g0LgwWjHPtYdyU...$ python make_passwd.pyDLrw9EiTQs4Wm…

【微软官方文档】Windows终端(Windows Terminal)

https://docs.microsoft.com/zh-cn/windows/terminal/

【转】WPF Expander 收缩不占空间的用法

WPF 中 Expander 的&#xff0c;默认折叠状态&#xff0c;只是把内容隐藏&#xff0c;实际是还是占有空间的。按照下面的做法&#xff0c;可以是下面的控件&#xff0c;位置移动。 <StackPanel > <Expander Name"a" Header"xxxx">…

多级队列调度算法可视化界面_C++实现操作系统调度算法(FSFS,SJF,RR,多级反馈队列算法)...

#include#include#include#includeusing namespace std;unsigned int q_id0; //用于队列进程号的全局变量unsigned int l_id0; //用于链表进程号的全局变量unsigned int stime0; //系统时间&#xff0c;开始为0struct Pro //调度进程的数据结构{unsigned int PID; //进程标志号…

【iOS开发】崩溃问题汇总

EXC_BAD_ACCESS崩溃 位置&#xff1a;在UIApplicationMain函数内崩溃&#xff0c;相关函数&#xff1a;objc_release&#xff0c;场景&#xff1a;在界面多次切换时崩溃&#xff0c;可以稳定复现&#xff0c;环境&#xff1a;启用了ARC。 原因可能有很多种&#xff0c;我的是…

【转】WPF之路-常用布局控件一

WPF布局原则 不应显式设置大小 为了布局的稳定性&#xff0c;控件的大小应该可以自动适应容器。如下为新建一个窗体&#xff0c;默认包含一个Grid容器&#xff0c;该控件没有显式设置宽高&#xff0c;所以&#xff0c;在改变窗体大小的时候&#xff0c;该容器的大小也随着变化…

jparepository查询所有_jpa中查询大量数据

数据库查询一直是提高程序速度的瓶颈之一&#xff0c;本人也遇到了因为数据库数据查询过久导致影响失败&#xff0c;在这里记录以下解决的方法。描述该功能为统计功能&#xff0c;根据参数查找出符合的器具信息&#xff0c;然后再根据统计信息得出统计数据。就好比要统计某个年…

数据库开发文章汇总

数据库是否应该使用外键约束&#xff1f;

【转】github中origin和upstream的区别

Fork&#xff0c;本身并不是git工具中的一个命令&#xff0c;也不是对git的扩展&#xff0c;它是在GitHub上的概念&#xff0c;是另一种clone方式——在服务器端的clone。 而我们通常意义上的clone&#xff0c;是将远程repo 复制一份到本地。 当你从GitHub上 clone 一个 repo …

sum函数两个同行的元素相加_Excel函数公式大全:利用sum函数进行汇总以及对多个汇总进行求和...

教程领到手&#xff0c;学习不用愁&#xff01;领 ↑↑↑最高效最快速的入门学习方式&#xff1a;看知识兔视频课程&#xff0c;跟着知识兔老师操作&#xff0c;听知识兔老师讲解&#xff0c;初学者不要自己瞎琢磨瞎折腾&#xff0c;很容易走弯路。学以致用&#xff0c;光看不练…

【开源库学习】OpenThreads

项目地址 Github&#xff1a;https://github.com/tibogens/OpenThreads 码云&#xff1a;https://gitee.com/lukeson/OpenThreads 参考资料 网上已经有很多比较好的文章了&#xff0c;这里汇总一下&#xff0c;便于查阅。 OpenThreads库介绍——ConditionOpenThreads库介绍…

cors 前后端分离跨域问题_前后端分离之CORS跨域访问踩坑总结

前言前后端分离的开发模式越来越流行,目前绝大多数的公司与项目都采取这种方式来开发,它的好处是前端可以只专注于页面实现,而后端则主要负责接口开发,前后端分工明确,彼此职责分离,不再高度耦合,但是由于这种开发模式将前后端项目分开来独立部署,所以将必不可免的会碰到跨域问…

【转】WPF入门教程系列六——布局介绍与Canvas(一)

从这篇文章开始&#xff0c;我们将对WPF中的界面如何布局做一个较简单的介绍&#xff0c;大家都知道&#xff1a;UI是做好一个软件很重要的因素&#xff0c;如果没有一个漂亮的UI&#xff0c;功能做的再好也无法吸引用户使用&#xff0c;而且没有漂亮的界面&#xff0c;那么普通…

【OSG学习】学习方法

1. 环境准备 运行调试环境的准备参考我的另外一篇博客&#xff1a;【OSG学习】准备开发调试环境 运行调试环境准备比较麻烦&#xff0c;但是不复杂&#xff0c;需要耐心。但是可能很多人会被卡在这一步&#xff0c;后面我会专门提供直接可以使用的完整项目&#xff0c;方便大…

【转】Vue.js入门教程(二)在页面中引入vue的方式

第二章&#xff1a;安装和基础效果展示 页面中引入vue 因为我们的目标是在最短的时间之内学会vue的使用方法&#xff0c;所以我们不一定需要通过npm工程化进行安装&#xff0c;你直接用script在页面中引用也完全没有问题。 第一种引入方式&#xff0c;script直接引入&#xf…