创建自定义大通知

2024-01-09

我想创建一个包含一些控件的通知。由于文本和控件在默认通知大小 (64dp) 下都很小,因此我希望它比默认大小更大。
可以创建更大的通知,我认为也可以有自定义布局,但我不知道如何。

To be more specific, the following screenshot shows the notification from spotify (image take from here http://androidauthority.com/spotify-android-notifications-controls-233010/): Spotify notification

如您所见,尺寸比默认尺寸大。此外,它有某种没有文本的 ImageButtons - 如果您使用Notification.Builder.addAction() http://developer.android.com/reference/android/app/Notification.Builder.html#addAction%28int,%20java.lang.CharSequence,%20android.app.PendingIntent%29,您可以提供一个图标,但还需要提供一个 CharSequence 作为描述 - 如果您将描述留空,仍然会为文本保留空间,并且如果您通过null,它会崩溃。

谁能告诉我如何使用自定义布局创建大通知?

Thanks


由于 API 更改而更新:

从 API 24 开始,Notification.Builder包含一个setCustomBigContentView(RemoteViews) https://developer.android.com/reference/android/app/Notification.Builder.html#setCustomBigContentView(android.widget.RemoteViews)-方法。还有通知兼容生成器 https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html(它是 support.v4 包的一部分)包含此方法。
请注意,该文档NotificationCompat.Builder.setCustomBigContentView https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setCustomBigContentView(android.widget.RemoteViews)状态:

提供自定义 RemoteView 来代替扩展表单中的平台模板。这将覆盖原本由该 Builder 对象构造的扩展布局。在 JELLY_BEAN 之前的版本上无操作。

因此,这也仅适用于 API >= 16 (JELLY_BEAN)。


原答案

所以在过度使用谷歌之后,我发现本教程 http://codeversed.com/expandable-notifications-android/解释如何使用自定义大布局。诀窍是不要使用setStyle()但手动设置bigContentView领域的Notification 构建之后。看起来有点老套,但这就是我最终想出的:

notification_layout_big.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp" <!-- This is where I manually define the height -->
    android:orientation="horizontal" >

    <!-- some more elements.. --> 
</LinearLayout>

建筑Notification在代码中:

Notification foregroundNote;

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

// bigView.setOnClickPendingIntent() etc..

Notification.Builder mNotifyBuilder = new Notification.Builder(this);
foregroundNote = mNotifyBuilder.setContentTitle("some string")
        .setContentText("Slide down on note to expand")
        .setSmallIcon(R.drawable.ic_stat_notify_white)
        .setLargeIcon(bigIcon)
        .build();

foregroundNote.bigContentView = bigView;

// now show notification..
NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotifyManager.notify(1, foregroundNote);

Edit
正如 chx101 所指出的,这只适用于 API >= 16。我在这个答案中没有提到它,但在上面给定的链接教程中提到了它:

扩展通知首次在 Android 4.1 JellyBean [API 16] 中引入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建自定义大通知 的相关文章

随机推荐

  • BackgroundWorker的IsBusy和“IsAlive”一样吗?

    我试图找到一种方法来验证BackgroundWorker线程是否处于活动状态 即仍在运行 该线程本质上是作为一个简单的无限循环实现的 while AllConditionsMet DoSomeMagic Thread Sleep 10000
  • 为什么 .NET 4 中的 BeforeFieldInit 行为发生变化?

    在 C 4 中 没有类型的行为beforefieldinit标志已更改 因此现在可以在首次使用类的任何静态字段之前调用类型初始值设定项 我的问题是为什么 C NET 团队改变了这种行为 主要原因是什么 您能举出任何实际例子来证明这种变化有意
  • 使用尺寸类别以编程方式实现两种不同的布局

    我有一个四个按钮的布局 在肖像中 它们应该一个在另一个之上 在横向中 它们应该分为两列 每列有两个按钮 我在代码中实现了按钮 非常简单的东西 UIButton btn1 UIButton alloc init self view addSu
  • 访问 Google Translate v2 API 时出现错误 403

    我正在尝试从 Android 应用程序中访问 Google 的翻译服务 但是 每次我尝试访问该服务 使用HttpGet请求 我遇到以下错误 error errors domain usageLimits reason accessNotCo
  • 如何在 Ansible 中去掉变量的引号?

    我正在尝试将文件中变量的值获取到 Ansible 变量中 以便我可以使用它 这是我所得到的 name extract Unique Key shell grep UNIQUE KEY config py cut d f 3 register
  • Android 获取所有已安装应用程序的列表

    我使用此代码获得了已安装应用程序的列表 public List
  • Laravel 6 显示 419 |页面已过期[重复]

    这个问题在这里已经有答案了 在本地服务器中 以下 laravel 项目工作正常 但是当项目上传到在线服务器上时 它显示了问题 当尝试登录时 它显示 419 419页面已过期 当我上传到在线服务时 我已经清除了路由 视图 缓存和配置 您的错误
  • 在参数中使用通配符

    在snakemake中使用config yaml文件定义参数时是否可以使用通配符 我使用通用 R 脚本来制作相同的基本热图 但使用不同的输入矩阵 我想使用通配符为 config yaml 文件中的每个热图指定热图的配置 例如 K 均值聚类的
  • 为什么自定义 DialogPreference 不会在 onSharedPreferenceChanged 侦听器上触发?

    我正在尝试在首选项中设置对话框首选项 用户只需单击肯定按钮即可触发某些操作 清除数据库 否 是 public class MyDialogPreference extends DialogPreference public MyDialog
  • 错误 D8016:“/ZI”和“/clr”命令行选项不兼容

    我的程序中出现以下错误 error D8016 ZI and clr command line options are incompatible 当我添加以下几行并在配置 gt 常规中启用公共运行时时会发生这种情况 如果我不启用它 则在使用
  • 错误:用户 ''@'localhost' 的访问被拒绝(使用密码:NO)

    我正在尝试使用 MySQL 和 Knex 进行数据库迁移 当我运行命令时knex migrate latest I get ER ACCESS DENIED ERROR Access denied for user localhost us
  • 使用 Node 提供 Vue 应用程序时,构建会导致空 HTML 页面出现语法错误

    我使用 CLI 创建了一个 VueJs 页面 我想在没有安装 Vue CLI 或 Node 的情况下向其他人展示它 就像您通常在浏览器中打开 html 文件一样 我想在构建后打开 index html 文件 当我打开该文件时 我在控制台中看
  • Postgres 中的 Group by 子句中有多个不需要的记录

    我有两张桌子 我将它们连接在一起 然后运行group by条款 问题是我不断收到不需要的数据 client table name company id created at company table name Query SELECT c
  • 使用 VSCode 调试 Celery

    我在用VSCode https code visualstudio com 用于使用 Django 框架进行 Web 开发 调试 Django 没有任何问题 但是当我尝试使用Celery http docs celeryproject or
  • Noob file.copy 问题在复制 .exe 文件 C# 时遇到问题

    我试图将 exe 文件从临时目录复制到桌面 但是当我这样做时 它只是创建一个新的 exe 文件 其中没有数据 大小为 0 KB 我用 txt 文件测试了这个语法 它完全复制了它 只是由于某种原因拒绝复制 exe 文件 我尝试使用string
  • 将颜色声明为常量

    我怎样才能申报Color输入为const像这样 private const Color MyLovedColor Color Blue 这不起作用 因为 Color Blue 是静态的而不是常量 只读对我没有帮助 因为我需要仅 支持 常量的
  • 纬度返回 0,0

    我正在尝试创建一个显示我当前位置的应用程序 我拥有所有必要的许可 我有另一个类名称 GPS 跟踪器来获取我的 GPS 位置 这是我的代码 GPSTracker gpsTracker new GPSTracker this LocationM
  • Nexus 7 上的 Android 4.2:canvas.drawText() 无法正常工作

    我的应用程序面临严重问题 该应用程序发布在 Google Play 上 并且显然在除 gt 4 0 之外的所有 Android 版本上都运行良好 这是我的 Android 4 0 HTC 手机的屏幕截图 这是我在 Nexus 7 Andro
  • 在 Sweetalert 上显示成功消息通知

    我想显示使用 Sweetalert 成功删除数据的消息以及脚本的开头 a href class delete link Delete a JavaScript jQuery document ready function delete li
  • 创建自定义大通知

    我想创建一个包含一些控件的通知 由于文本和控件在默认通知大小 64dp 下都很小 因此我希望它比默认大小更大 可以创建更大的通知 我认为也可以有自定义布局 但我不知道如何 To be more specific the following