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实现的三层BP神经网络算法示例
Feb 07 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
Oct 15 Python
python的继承知识点总结
Dec 10 Python
pandas的qcut()方法详解
Jul 06 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
python numpy数组中的复制知识解析
Feb 03 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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 printf输出格式使用说明
2010/12/05 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
js实现人民币大写金额形式转换
2016/04/27 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
js+css实现打字效果
2020/06/24 Javascript
angularJS开发注意事项
2018/05/26 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
Python模块的制作方法实例分析
2019/12/21 Python
如何基于线程池提升request模块效率
2020/04/18 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
教师年终个人总结
2015/02/11 职场文书
篮球赛新闻稿
2015/07/17 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技