使用扩展程序在通知托盘中显示多行通知说明
Showing more than one line of the notification description in the notification tray using an extension
我目前正在设计一个扩展程序,使日历的通知部分中的通知成为可消耗的。目标是使通知像桌面上的初始通知一样扩展。我已将添加到通知托盘的通知类型从 class NotificationMessage
更改为 class NotificationBanner
。我目前正在使用变通方法来完成这项工作,这就是我的扩展函数的样子:
expand(animate) {
this.expanded = true;
this._actionBin.visible = this._actionBin.get_n_children() > 0;
if (this._bodyStack.get_n_children() < 2) {
this._expandedLabel = new MessageList.URLHighlighter(this._bodyText,
true, this._useBodyMarkup);
this.setExpandedBody(this._expandedLabel);
}
if (animate) {
if (!this.clickedByButton && !this.forceExpansion) {
// This is the usual way notifications are expanded, using the layout manager
this._bodyStack.ease_property('@layout.expansion', 1, {
progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: MessageTray.ANIMATION_TIME,
});
}
else if (this.forceExpansion || this.clickedByButton) {
// When auto expanding or clicked by button, change height of body
oldHeight = this.bodyLabel.get_height();
const lines = Math.ceil(this._bodyText.length / 54);
this.bodyLabel.set_height(lines * this.bodyLabel.get_height());
}
this._actionBin.scale_y = 0;
this._actionBin.ease({
scale_y: 1,
duration: MessageTray.ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
});
} else {
this._bodyStack.layout_manager.expansion = 1;
this._actionBin.scale_y = 1;
}
this.emit('expanded');
}
如您所见,我对此扩展有 2 个选项:强制展开所有通知或让用户使用按钮展开。目前的解决方案并不优雅,它只是改变了管理正文的通知标签的高度。此外,通知正文仍然显示三个点,这意味着通知正文仍未展开。我认为这是布局管理器的问题,因为正确的扩展方式是将 message._bodyStack.layout_manager.expansion
设置为 1。这在通知托盘中扩展消息的情况下不起作用。是否有人熟悉布局管理器或可以帮助我找到不同的解决方案?这是我当前解决方案的图像:
Image of an automatically expanded notification in the notification tray due to the extension (note the three dots at the end of the first line being still there)
好的,我找到了解决方案,它与布局管理器无关。消息 message.bodyLabel.clutter_text.ellipsize
的值设置为 3,这是通知上出现圆点的主要原因。将此值设置为 0 可解决此问题。我仍然希望找到一种更优雅的方法来显示 body,但这样就可以了。
我目前正在设计一个扩展程序,使日历的通知部分中的通知成为可消耗的。目标是使通知像桌面上的初始通知一样扩展。我已将添加到通知托盘的通知类型从 class NotificationMessage
更改为 class NotificationBanner
。我目前正在使用变通方法来完成这项工作,这就是我的扩展函数的样子:
expand(animate) {
this.expanded = true;
this._actionBin.visible = this._actionBin.get_n_children() > 0;
if (this._bodyStack.get_n_children() < 2) {
this._expandedLabel = new MessageList.URLHighlighter(this._bodyText,
true, this._useBodyMarkup);
this.setExpandedBody(this._expandedLabel);
}
if (animate) {
if (!this.clickedByButton && !this.forceExpansion) {
// This is the usual way notifications are expanded, using the layout manager
this._bodyStack.ease_property('@layout.expansion', 1, {
progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: MessageTray.ANIMATION_TIME,
});
}
else if (this.forceExpansion || this.clickedByButton) {
// When auto expanding or clicked by button, change height of body
oldHeight = this.bodyLabel.get_height();
const lines = Math.ceil(this._bodyText.length / 54);
this.bodyLabel.set_height(lines * this.bodyLabel.get_height());
}
this._actionBin.scale_y = 0;
this._actionBin.ease({
scale_y: 1,
duration: MessageTray.ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
});
} else {
this._bodyStack.layout_manager.expansion = 1;
this._actionBin.scale_y = 1;
}
this.emit('expanded');
}
如您所见,我对此扩展有 2 个选项:强制展开所有通知或让用户使用按钮展开。目前的解决方案并不优雅,它只是改变了管理正文的通知标签的高度。此外,通知正文仍然显示三个点,这意味着通知正文仍未展开。我认为这是布局管理器的问题,因为正确的扩展方式是将 message._bodyStack.layout_manager.expansion
设置为 1。这在通知托盘中扩展消息的情况下不起作用。是否有人熟悉布局管理器或可以帮助我找到不同的解决方案?这是我当前解决方案的图像:
Image of an automatically expanded notification in the notification tray due to the extension (note the three dots at the end of the first line being still there)
好的,我找到了解决方案,它与布局管理器无关。消息 message.bodyLabel.clutter_text.ellipsize
的值设置为 3,这是通知上出现圆点的主要原因。将此值设置为 0 可解决此问题。我仍然希望找到一种更优雅的方法来显示 body,但这样就可以了。