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: 在原有基础上扩展开之后会将图标展示为大图的样式
android自定义push通知_Android自定义Notification的一些坑相关推荐
- android自定义push通知_android通过自定义toast实现悬浮通知效果的示例代码
android通过toast实现悬浮通知效果,如图: 实现的功能: 自定义悬浮弹窗: 点击其他地方该布局不受影响: 可自定义显示时间: 可以设置点击事件: 代码如下: import android.c ...
- android自定义push通知_20个海外Web和App推送通知服务工具
在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...
- android指定sqlite路径_Android:自定义Sqlite数据库路径
默认的sqlite数据库是放在/data/data/database目录下的,今天看腾讯云IM的demo发现再该路径下找不到它存放消息的数据库,找了下后发现居然是放在/data/data/files目 ...
- android自定义金额输入键盘_Android 自定义输入支付密码的软键盘实例代码
Android 自定义输入支付密码的软键盘 有项目需求需要做一个密码锁功能,还有自己的软键盘,类似与支付宝那种,这里是整理的资料,大家可以看下,如有错误,欢迎留言指正 需求:要实现类似支付宝的输入支付 ...
- android 特殊用户通知用法汇总--Notification源码分析
一直用的android手机,用过这么多的app,平时也会遇到有趣的通知提醒,在这里先总结两种吧,notification和图标数字,有的以后看到再研究.还有,推广一下哈,刚刚建立一个Q群5446459 ...
- android canvas绘制圆角_Android自定义View撸一个渐变的温度指示器(TmepView)
秦子帅明确目标,每天进步一点点..... 作者 | andy 地址 | blog.csdn.net/Andy_l1/article/details/82910061 1.概述 自定义View对需要 ...
- android绘制心形_Android自定义View系列(一)——打造一个爱心进度条
写作原因:Android进阶过程中有一个绕不开的话题--自定义View.这一块是安卓程序员更好地实现功能自主化必须迈出的一步.下面这个系列博主将通过实现几个例子来认识安卓自定义View的方法.从自定义 ...
- android 图片圆角 遮罩_Android 自定义View练手Demo(一)实现圆角遮罩效果
Android 自定义View系列文章 Android自定义View实现圆角遮罩效果 一图胜千言,有一个遮罩就会凸显出重点区域 1-1.jpg 本文通过两种方式来实现这种效果,来达到自定义View练手 ...
- android录音波浪动画_Android自定义View实现波浪动画
本文实例为大家分享了Android自定义View实现波浪动画的具体代码,供大家参考,具体内容如下 效果演示 代码调用与实现效果 xml中调用 android:layout_width="ma ...
最新文章
- 1作业python数据类型 条件循环 列表
- linux ftp dns,Ubuntu下FTP与DNS服务器搭建教程PDF
- 位图布隆过滤器海量数据处理
- android+4.4.2+横屏,Android 横竖屏和布局问题
- java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...
- python协程asyncio 应用_Python-如何使用asyncio同时运行多个协程?
- 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)
- 【编程范式】连续数据的前面部分后移的实现
- schedule event mysql_mysql计划任务:event schedule
- 使用触发器对学生表操作进行日志记录
- 现代控制理论——状态、状态空间、状态空间描述
- 新闻分类(文本分类)
- 巴比特 | 元宇宙每日必读:手握多个NFT IP,无聊猿“教父” Yuga Labs 如何建元宇宙?...
- 磁盘分区怎么恢复回去
- ChatGPT版必应发飙!怒斥人类:放尊重些
- 告别黑暗 电脑黑屏故障排除实例一则
- jQuery实现简单日历
- 一文了解 Nginx 反向代理与 conf 原理「技术干货分享」
- java重载运算符_流形:Java的运算符重载
- 外汇交易与实务--汇率
热门文章
- Windows 环境下运用Python制作网络爬虫
- 【LintCode题集】Q6、Q64
- ubuntu下修改mysql编码,使能支持中文
- [安全模型][Cambria Math][A][]敌手A-> 怎么打出来?
- [Leetcode][程序员面试金典][面试题17.13][JAVA][恢复空格][动态规划][Trie][字符串哈希]
- [Leedcode][JAVA][第125题][验证回文串][双指针][String]
- 架构设计分布式数据结构与算法面试题
- [剑指offer][JAVA]面试题第[06]题[从尾到头打印链表][栈][递归]
- [Leedcode][JAVA][第999题][直接考虑题意]
- jmap 文件解析_干货分享丨jvm系列:dump文件深度分析