通知
通知
通知框应该尽量不主动吸引用户的注意力 IntelliJ Platform提供了几种通知框,具体可查看 Notifications
对话框
当用户点击对话框中确定按钮时,会调用 DialogWrapper.doValidate() 方法,此时会校验用户输入的合法性,如果有异常,会通过对话框通知用户异常信息
编辑提示
在编辑器里执行操作时(例如:重构,导航,和代码对比等功能),通知用户无法执行该操作时,最好使用 HintManager ,showErrorHint()方法会在编辑器弹出一个浮动弹出框,当用户执行另一个操作的时候会自动隐藏,HintManager的其它方法提供了多种提示方式
编辑器横幅(banner)
banner通常出现在文件编辑器的顶部,询问用户是否需要执行某个重要操作以修复可能出现的问题(例如:找不到SDK, 必须用户输入的配置)
在plugin.xml注册一个 com.intellij.editorNotificationProvider类型的 EditorNotifications.Provider 扩展点,如果不需要访问索引,可以实现 DumbAware 接口
可以参考EditorNotificationPanel ,它是常用的实现类
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
<editorNotificationProvider implementation=""></editorNotificationProvider>
</extensions>
"Got It" 通知
通过 GotItMessage 突出显示重要的新功能/更改功能。有关概述,请参阅 IntelliJ 平台 UI 指南中的 Got It 工具提示 。
顶级通知(气球通知)
通用的通知文档是使用 Notifications 类
它有2个优点:
- 用户可以在Settings/Preferences | Appearance & Behavior | Notifications中控制每种通知类型的显示方式
- 所有显示过的历史通知都可以在idea右下角的Event Log里看到
相关UI,可以查看 Balloon 文档
Notifications.Bus.notify() 方法可以显示一个通知,如果知道当前的 Project, 请使用带 Project参数的重载方法,这时候通知会显示在它相关的框架中
通知文本可以包含 HTML 标签
使用 Notification.addAction(AnAction) 可以在通知内容下增加一个链接,为方便起见,AnAction建议使用 NotificationAction。
Notification 构造器中的 groupId 参数指定通知类型。用户可以为每一个通知选择对应的通知类型(类型参数 Settings/Preferences | Appearance & Behavior | Notifications.)
要指定首选显示类型,你需要使用 NotificationGroup 创建通知
根据 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);
}
}