我正在开发一个基于 Eclipse RCP 的应用程序,我们决定不希望任何菜单项在文本旁边显示图标。我们看到的问题是,Undo、Redo、Cut、Copy、Paste 等标准操作都显示相应操作的默认图标。
有没有办法告诉动作管理基础设施忽略图标?我对此的蛮力解决方案是重建 SWT,以便 MenuItem.setImage() 是无操作的,然后在最终产品中包含我们自己的 SWT 副本,但似乎应该有一个更轻量级的解决方案.
我正在开发一个基于 Eclipse RCP 的应用程序,我们决定不希望任何菜单项在文本旁边显示图标。我们看到的问题是,Undo、Redo、Cut、Copy、Paste 等标准操作都显示相应操作的默认图标。
有没有办法告诉动作管理基础设施忽略图标?我对此的蛮力解决方案是重建 SWT,以便 MenuItem.setImage() 是无操作的,然后在最终产品中包含我们自己的 SWT 副本,但似乎应该有一个更轻量级的解决方案.
事实证明这比我希望的要容易。
创建 org.eclipse.ui.application.ActionBarAdvisor 的子类。像这样覆盖方法寄存器:
protected void register(IAction action) {
super.register(action);
action.setImageDescriptor(null);
}
然后,创建一个覆盖 createActionBarAdvisor 的 org.eclipse.ui.application.WorkbenchWindowAdvisor 的子类:
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new MyActionBarAdvisor(configurer);
}
而已。所有操作将不再有图标。
我相信您想进一步检查清单并查看 org.eclipse.ui.views 并查看其中是否有用于删除图标的内容
不包括图标的原因是什么?为创建标准接口付出了很多努力,偏离标准有什么好处?你认为他们的遗漏会增加可用性吗?
说了这么多,您可以尝试使用一些 AspectJ 围绕建议提供一个片段,以拦截对 setImage() 的调用并否决它们。
您可以通过转到 plugin.xml 中的扩展选项卡来执行此操作。添加扩展 org.eclipse.ui.menu(如果不存在)。右键单击创建一个新的菜单贡献。再次右键单击并创建一个新菜单。在这里你可以选择使用类路径中图标文件夹中保存的图像更改图像