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中的mock库对Python代码进行模拟测试
Apr 16 Python
Python模拟三级菜单效果
Sep 11 Python
Python给你的头像加上圣诞帽
Jan 04 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
python保存log日志,实现用log日志画图
Dec 24 Python
python机器学习库xgboost的使用
Jan 20 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 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
通过html表格发电子邮件
2006/10/09 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
Python内置模块turtle绘图详解
2017/12/09 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
巴西购物网站:Estrela10
2018/12/13 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
高中军训感言1000字
2014/03/01 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
合伙协议书范本
2014/04/21 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
二审答辩状范文
2015/05/22 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电