最近在做一个音乐播放器的时候遇到了一个关于notification的问题,在网上找了很久都没有头绪。后来找到了解决的办法,特意记录一下。

问题描述

首先请看网易云音乐的通知栏

普通高度的notification.png

加高notification.png

可以看到,网易云音乐的通知栏有两种,一种是普通的通知栏,一种是显示bigView的通知栏。这两种通知栏是可以通过双指上滑/下滑来切换的(说实话,我今天才知道原来还有这个功能...)。

网易云音乐在播放音乐的时候,默认显示的是第二种通知栏,而我今天遇到的问题是:通过自定义布局来实现通知栏,默认情况下只能显示第一种普通高度的通知栏,需要双指滑动一下才能显示bigView通知栏。

对于大多数用户来说,可能并不知道有双指滑动通知栏这一功能,因此这样的用户体验是不够友好的,那么,如何实现像网易云一样的,默认就显示bigView的notification呢?

首先新建一个测试项目,再新建两个布局,一个用作普通的notification视图,一个用作bigView的notification视图:

普通notification视图,命名为normal_notification.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:layout_width="64dp"

android:layout_height="64dp"

android:src="@mipmap/icon"/>

android:layout_width="0dp"

android:layout_height="64dp"

android:layout_marginEnd="10dp"

android:layout_marginStart="10dp"

android:layout_weight="1"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:text="歌曲名"

android:textSize="18sp"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="5dp"

android:text="歌手名"/>

android:layout_width="wrap_content"

android:layout_height="64dp"

android:gravity="center_vertical">

android:layout_width="26dp"

android:layout_height="26dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/pre"/>

android:layout_marginStart="10dp"

android:layout_width="26dp"

android:layout_height="26dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/play"/>

android:layout_marginStart="10dp"

android:layout_width="26dp"

android:layout_height="26dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/next"/>

bigView的notification视图,命名为big_notification.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:layout_width="110dp"

android:layout_height="110dp"

android:src="@mipmap/icon"/>

android:layout_width="match_parent"

android:layout_height="110dp"

android:orientation="vertical">

android:id="@+id/tv_song_name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginEnd="10dp"

android:layout_marginStart="10dp"

android:layout_marginTop="10dp"

android:text="歌名"

android:textSize="15sp"/>

android:id="@+id/tv_song_singer"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginEnd="10dp"

android:layout_marginStart="10dp"

android:layout_marginTop="5dp"

android:text="歌名"

android:textSize="12sp"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginStart="10dp"

android:layout_marginTop="20dp"

android:gravity="center_vertical"

android:orientation="horizontal">

android:layout_marginEnd="10dp"

android:layout_width="26dp"

android:layout_height="26dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/like"/>

android:layout_marginEnd="10dp"

android:layout_width="26dp"

android:layout_height="26dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/pre"/>

android:layout_marginEnd="10dp"

android:layout_width="38dp"

android:layout_height="38dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/play"/>

android:layout_marginEnd="10dp"

android:layout_width="26dp"

android:layout_height="26dp"

android:background="@null"

android:scaleType="fitCenter"

android:src="@mipmap/next"/>

除了这两个用作notification的布局文件之外,在主界面中还有一个按钮,通过按钮的点击事件,模拟开始播放音乐,发送通知。这里就不贴代码了,直接贴按钮点击事件中的核心代码:

//发送自定义视图通知

public void sendCustomViewNotification(View view) {

//普通notification用到的视图

RemoteViews normalView = new RemoteViews(getPackageName(), R.layout.normal_notification);

//显示bigView的notification用到的视图

RemoteViews bigView = new RemoteViews(getPackageName(), R.layout.big_notification);

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(R.mipmap.ic_launcher)

.setTicker("开始播放啦~~")

.setOngoing(true)

.setContent(normalView)//设置普通notification视图

.setCustomBigContentView(bigView)//设置显示bigView的notification视图

.setPriority(NotificationCompat.PRIORITY_MAX)//设置最大优先级

.build();

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

manager.notify(22, notification);

}

上面这段代码相信大家应该经常使用,这是构建一个自定义通知的基本代码。在使用builder对象为notification设置一些列熟悉的时候,有三个关键的方法,我都已经注释出来了

1.setContent:给notification设置普通状态下显示的视图

2. setCustomBigContentView():给notification设置bigView

设置完上面两个方法之后,程序应该能实现双指滑动切换普通notification和bigView notification了,但还无法像网易云的通知栏一样,默认显示bigView notification,所以:

3. setPriority(NotificationCompat.PRIORITY_MAX):给notification设置最高的优先级

设置了优先级之后,终于能够实现和网易云音乐相同的通知栏效果了,大功告成,下面上图:

默认启动的时候:

默认启动时显示的通知栏

双指滑动后效果:

2.png

PS:

1.上面写的两个布局文件没有参考意义,快下班了,噼里啪啦写出来的,估计有些问题

2.有空录下GIF,效果应该会更直观

android+仿最新网易云音乐底面栏,安卓仿网易云音乐通知栏控制音乐,默认显示Notification bigView...相关推荐

  1. android仿百度新闻,【Android】最新主流新闻app功能实现。仿网易,搜狐等新闻客户端实现展示...

    最新主流新闻app功能实现.仿网易,搜狐等新闻客户端 (原创作品,转载请说明出处)先给大家看一下效果图: 这个项目总体来说虽然不是特别难,但是确实非常常用的功能.是业余时间自己写的一个小项目. 以前我 ...

  2. 【Android】最新主流新闻app功能实现。仿网易,搜狐等新闻客户端实现展示

    最新主流新闻app功能实现.仿网易,搜狐等新闻客户端 作者:程序员小冰 欢迎点击关注微博 (原创作品,转载请说明出处)先给大家看一下效果图: 这个项目总体来说虽然不是特别难,但是确实非常常用的功能.是 ...

  3. ehshig蒙文歌曲_额格希格音乐播放器_额格希格音乐播放器安卓版下载_额格希格音乐播放器最新版app下载_好趣手游网...

    额格希格蒙语版是一款颇具民族特色的蒙文歌曲下载软件.额格希格音乐播放器收集了最全的蒙文歌曲曲库,各种经典的蒙文歌曲以及当前流行的蒙文流行歌全都有,深受广大内蒙用户喜爱! 软件介绍 想了解蒙语音乐或者想 ...

  4. 车秘android版本最新版本,车秘下载2021安卓最新版_手机app官方版免费安装下载_豌豆荚...

    程序需要调用以下重要权限: 直接安装应用 - 允许程序安装应用 直接拨打电话号码 - 允许程序从非系统拨号器里输入电话号码 编辑您的讯息(短信或彩信) - 允许编写短信 请求安装文件包 - 允许程序请 ...

  5. 安卓仿网易云界面的本地音乐播放器的实现

    前言:读研究生之前,老板让学IOS,老老实实看了一个学期的IOS(在这里强烈安利一下腾讯课堂的小码哥IOS视频,基本刚开始只需要10块买第一部,后面的就可以用可视币来兑换了,质量还不错,能学到很多东西 ...

  6. Android系统默认显示电池电量百分比

    Android系统默认显示电池电量百分比 整理一下修该需求时候遇到的问题以及进行修改的思路: 需求:Android 11 让系统默认显示电池电量百分比 整理一下修该需求时候遇到的问题以及进行修改的思路 ...

  7. 安卓 实现网易云音乐底部播放栏效果之使用UI绑定到Service上实现

    先说原理:音乐播放需要使用到Service,而播放栏也是属于音乐播放的,那么为什么我们不把这两者合在一起呢? 把UI和音乐Service合在一起,用Service来控制UI界面不是更简单.在进入Act ...

  8. 网易云音乐android api_网易云音乐怎么发布个人Mlog?网易云音乐发布个人Mlog的教程介绍...

    现在很多人都喜欢发Mlog,网易云音乐中也可以发布mlog啦,下面小编就为大家带来网易云音乐发布个人Mlog的具体操作方法,想知道的话就来看看吧. 网易云音乐怎么发布个人Mlog?网易云音乐发布个人M ...

  9. 项目总结3 类似网易云音乐导航栏指示器(个性推荐、歌单等)的简单实现(一)

    我们先来看看网易云音乐导航栏指示器是什么样的. 箭头指向的蓝色框就是导航指示器,点击之后下面的view会跟着移动,每个button下面还有个小红线跟着.这个效果其实不难实现,我们先来分析分析. 在iO ...

最新文章

  1. 2022-2028中国快时尚服装市场竞争及发展前景预测报告
  2. Java关键字及其作用
  3. Android -- EventBus使用
  4. LeetCode Rotate Function(寻找规律)
  5. 【译】如何使用索引视图和一个只有2行的表限制业务规则
  6. 面向小白:git和github的简明使用教程
  7. MFC 中屏蔽CDialog类窗体处理ESC和ESCAPE按键
  8. java mvc ef_一个简单MVC5 + EF6示例分享
  9. Cloud for Customer的设置加载机制
  10. [机器学习] PMML实现模型上线
  11. 学计算机之路写一篇作文,我的学习之路作文(2篇)
  12. ArrayDeque 双端队列
  13. 正则表达式 以字符串开头_干货-Shell编程之正则表达式
  14. 使用字典暴力破解练习
  15. 北京理工大学OJ的Mid难度题目的题解
  16. 语法树,短语,直接短语,句柄
  17. java 编写metro风格_纯Javascript实现Windows 8 Metro风格实现
  18. 利用javascript写一个石头剪刀布的简易小游戏
  19. 睿智的目标检测27——Pytorch搭建Faster R-CNN目标检测平台
  20. Edge浏览器缓存问题简直可怕

热门文章

  1. 使用mklink连接文件夹
  2. 2021年中国智慧停车行业发展环境(PEST)分析:智慧停车市场未来可期 [图]
  3. numpy矩阵乘法中的multiply,matmul和dot
  4. I3D Finetune
  5. 卡西欧数码相机上的照片误删了怎么弄
  6. 编译原理课程设计:语法分析器
  7. 后疫情时代美业系统saas解决线下实体美容院美甲店的困境
  8. 使用OpenCV对图像进行两种平移操作(图像的尺寸变化与图像的尺寸不变)
  9. 做漂亮女人的每天八件大事
  10. 012用于癫痫发作预测的半扩张卷积神经网络-2021