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中遍历文件的3个方法
Sep 02 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
基于python实现百度翻译功能
May 09 Python
python3 下载网络图片代码实例
Aug 27 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
python中提高pip install速度
Feb 14 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
Python 生成VOC格式的标签实例
Mar 10 Python
python爬虫容易学吗
Jun 02 Python
如何用python免费看美剧
Aug 11 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Django中URL的参数传递的实现
2019/08/04 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
厨房工作人员岗位职责
2013/11/15 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
个人主要事迹材料
2014/08/26 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android