通知

走着路睡觉大约 3 分钟

通知

通知框应该尽量不主动吸引用户的注意力 IntelliJ Platform提供了几种通知框,具体可查看 Notificationsopen in new window

对话框

当用户点击对话框中确定按钮时,会调用 DialogWrapper.doValidate()open in new window 方法,此时会校验用户输入的合法性,如果有异常,会通过对话框通知用户异常信息

编辑提示

在编辑器里执行操作时(例如:重构,导航,和代码对比等功能),通知用户无法执行该操作时,最好使用 HintManageropen in new window ,showErrorHint()方法会在编辑器弹出一个浮动弹出框,当用户执行另一个操作的时候会自动隐藏,HintManager的其它方法提供了多种提示方式

hint

编辑器横幅(banner)

横幅介绍open in new window

banner通常出现在文件编辑器的顶部,询问用户是否需要执行某个重要操作以修复可能出现的问题(例如:找不到SDK, 必须用户输入的配置)

在plugin.xml注册一个 com.intellij.editorNotificationProvider类型的 EditorNotifications.Provideropen in new window 扩展点,如果不需要访问索引,可以实现 DumbAwareopen in new window 接口

可以参考EditorNotificationPanelopen in new window ,它是常用的实现类

  <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
        <editorNotificationProvider implementation=""></editorNotificationProvider>

    </extensions>

"Got It" 通知

通过 GotItMessageopen in new window 突出显示重要的新功能/更改功能。有关概述,请参阅 IntelliJ 平台 UI 指南中的 Got It 工具提示open in new window

顶级通知(气球通知)

通用的通知文档是使用 Notificationsopen in new window

它有2个优点:

  • 用户可以在Settings/Preferences | Appearance & Behavior | Notifications中控制每种通知类型的显示方式

nofifications

  • 所有显示过的历史通知都可以在idea右下角的Event Log里看到

event-log

相关UI,可以查看 Balloonopen in new window 文档

Notifications.Bus.notify()open in new window 方法可以显示一个通知,如果知道当前的 Project, 请使用带 Project参数的重载方法,这时候通知会显示在它相关的框架中

通知文本可以包含 HTML 标签

使用 Notification.addAction(AnAction) 可以在通知内容下增加一个链接,为方便起见,AnAction建议使用 NotificationAction。

Notificationopen in new window 构造器中的 groupId 参数指定通知类型。用户可以为每一个通知选择对应的通知类型(类型参数 Settings/Preferences | Appearance & Behavior | Notifications.)

要指定首选显示类型,你需要使用 NotificationGroupopen in new window 创建通知

根据 IntelliJ Platform版本的不同,查看下面相对应的步骤:

2020.3 和之后的版本

<!--在plugin.xml注册扩展点,key是指定国际化名称的key-->
<extensions defaultExtensionNs="com.intellij">
    <notificationGroup id="Custom Notification Group"
                       displayType="BALLOON"
                       key="notification.group.name"/>
</extensions>

定义好id后,可以通过id注册通知

public class MyNotifier {

  public static void notifyError(@Nullable Project project,
                                 String content) {
    NotificationGroupManager.getInstance()
            // plugin.xml里配置的id
            .getNotificationGroup("Custom Notification Group")
            .createNotification(content, NotificationType.ERROR)
            .notify(project);
  }

}

2020.3之前的版本

直接在代码里注册通知

public class MyNotifier {

  private static final NotificationGroup NOTIFICATION_GROUP =
          new NotificationGroup("Custom Notification Group", NotificationDisplayType.BALLOON, true);

  public static void notifyError(@Nullable Project project, String content) {
    NOTIFICATION_GROUP.createNotification(content, NotificationType.ERROR)
            .notify(project);
  }

}
上次编辑于:
贡献者: zhaojingbo
Loading...