Android Q之气泡弹窗的实现示例


Posted in Python onJune 23, 2020

在Android Q中,用户可以借助气泡,轻松地在设备上任何位置进行多任务处理。气泡内置于“通知”系统中,它会浮动在其他应用的上层,并会跟随用户的移动而移动到屏幕的任何位置,用于取代SYSTEM_ALERT_WINDOW。气泡可以展开显示应用功能和信息,并在不使用时折叠起来。当设备处于已锁定状态或始终保持活动状态,气泡会像通知那样显示。气泡弹窗效果如下图:

Android Q之气泡弹窗的实现示例

一、气泡配置信息 

气泡是一种可以选择停用的功能,在应用显示第一个气泡时,系统会弹出权限对话框,提供两种选项:

  • 屏蔽来自您的应用的所有气泡 - 通知不会被屏蔽,但永远不会显示为气泡;
  • 允许来自您的应用的所有气泡 - 通过 BubbleMetaData 发送的所有通知都会显示为气泡;

气泡是通过Notification API创建的。我们如果要让通知显示气泡效果,需要添加一些配置信息。因为气泡的展开视图是根据选择的Activity来创建的,此Activity需要经过配置才能显示为气泡。此Activity必须是可以调整大小、嵌入式的,并始终可以在文档模式界面下启动。如下代码是气泡Activity的配置:

<activity
   android:name=".BubbleActivity"
   android:theme="@style/AppTheme.NoActionBar"
   android:label="@string/title_activity_bubble"
   android:allowEmbedded="true"
   android:documentLaunchMode="always"
   android:resizeableActivity="true"
  />

二、发送气泡 

要发送气泡,需要执行如下步骤:

  • 按照一般步骤创建通知;
  • 调用 Notification.BubbleMetadata.Builder 以创建 BubbleMetadata 对象;
  • 使用 setBubbleMetadata 将元数据添加到通知;

发送气泡的实例代码如下:

// 创建气泡intent
  Intent target = new Intent(mContext, BubbleActivity.class);
  PendingIntent bubbleIntent =
    PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);
 
  // 创建气泡元数据
  Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder()
      .setDesiredHeight(600)
      // Note: although you can set the icon is not displayed in Q Beta 2
      .setIcon(Icon.createWithResource(context, R.drawable.icon))
      .setIntent(bubbleIntent)
      .build();
 
  // 创建通知
  Person chatBot = new Person.Builder()
      .setBot(true)
      .setName("BubbleBot")
      .setImportant(true)
      .build();
 
  Notification.Builder builder =
    new Notification.Builder(mContext, CHANNEL_ID)
      .setContentIntent(contentIntent)
      .setSmallIcon(smallIcon)
      .setBubbleMetadata(bubbleData);

三、创建展开的气泡

我们可以将气泡配置为自动展开显示,可以使用以下方法来设置用于启用这些行为的标记:setAutoExpandBubble()和setSuppressInitialNotification()。

Java实例代码如下:

Notification.BubbleMetadata bubbleData =
        new Notification.BubbleMetadata.Builder()
            .setDesiredHeight(600)
            .setIntent(bubbleIntent)
            .setAutoExpandBubble(true)
            .setSuppressInitialNotification(true)
            .build();

kotlin实例代码如下:

val bubbleMetadata = Notification.BubbleMetadata.Builder()
    .setDesiredHeight(600)
    .setIntent(bubbleIntent)
    .setAutoExpandBubble(true)
    .setSuppressInitialNotification(true)
    .build()

到此这篇关于Android Q之气泡弹窗的实现示例的文章就介绍到这了,更多相关AndroidQ 气泡弹窗内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用Python实现KNN分类算法
Dec 22 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
对Python中的@classmethod用法详解
Apr 21 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
对python的输出和输出格式详解
Dec 08 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
Python 全局空间和局部空间
Apr 06 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 #Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 #Python
python如何查看安装了的模块
Jun 23 #Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 #Python
Python dict的常用方法示例代码
Jun 23 #Python
Python3 webservice接口测试代码详解
Jun 23 #Python
python和JavaScript哪个容易上手
Jun 23 #Python
You might like
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
jQuery之按钮组件的深入解析
2013/06/19 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
js判断密码强度的方法
2020/03/18 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
Python 深入理解yield
2008/09/06 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
python获取Linux发行版名称
2019/08/30 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
Structs界面控制层技术
2013/10/11 面试题
计算机工程学院个人求职信
2013/10/05 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
社区学习十八大感想
2014/01/22 职场文书
社区党员先进事迹
2014/01/22 职场文书
广告词串烧
2014/03/19 职场文书
竞选村长演讲稿
2014/04/28 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
实习单位指导教师评语
2014/12/30 职场文书
承诺书范本
2015/01/21 职场文书
受资助学生感谢信
2015/01/21 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
关于Redis的主从复制及哨兵问题
2022/06/16 Redis