eclipe 4以上的插件就支持CSS主题切换的功能
plugin.xml 中扩展点org.eclipse.core.runtime.products、org.eclipse.e4.ui.css.swt.theme
<extension id="product" point="org.eclipse.core.runtime.products"> <product application="org.eclipse.e4.ui.examples.css.rcp.application" name="CSS Mail Example"> <property name="aboutText" value="CSS RCP Mail template"> </property> <property name="windowImages" value="icons/sample2.gif"> </property> <property name="aboutImage" value="icons/alt_about.gif"> </property> <property name="appName" value="CSS Mail Example"> </property> <!--一开始指定css--> <span style="color:#ff0000;"><strong><!--<property name="applicationCSS" value="platform:/plugin/org.eclipse.e4.ui.examples.css.rcp/css/colorful.css"> </property>--></strong></span> </product> </extension> <extension point="org.eclipse.e4.ui.css.swt.theme"> <!--basestylesheeturi 指明绑定的css的位置--> <theme basestylesheeturi="<strong><span style="color:#ff0000;">css/default.css</span></strong>" id="org.eclipse.e4.ui.examples.css.rcp" label="RCP example theme"> </theme> <theme basestylesheeturi="<span style="color:#ff0000;"><strong>css/colorful.css</strong></span>" id="org.eclipse.e4.ui.examples.css.colorful" label="Colorful Example"> </theme> </extension>
ThemeHelperl类用于生成主题引擎(用于不同css之间切换)
import org.eclipse.core.runtime.Platform; import org.eclipse.e4.ui.css.swt.theme.IThemeEngine; import org.eclipse.e4.ui.css.swt.theme.IThemeManager; import org.eclipse.e4.ui.examples.css.rcp.Activator; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; /** * 提供获得主题引擎 * @author Administrator * */ @SuppressWarnings("restriction") public class ThemeHelper { private static IThemeEngine engine = null; private static Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID); public static IThemeEngine getEngine() { if (engine == null) { engine = getThemeEngine(); } return engine; } private static IThemeEngine getThemeEngine() { BundleContext context = bundle.getBundleContext(); ServiceReference ref = context.getServiceReference(IThemeManager.class.getName()); IThemeManager manager = (IThemeManager) context.getService(ref); return manager.getEngineForDisplay(PlatformUI.getWorkbench() .getActiveWorkbenchWindow() == null ? Display.getCurrent() : PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getShell().getDisplay()); } }用于切换主题的操作
import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.e4.ui.examples.css.rcp.theme.ThemeHelper; /** * 切换主题的实现类 * @author Administrator * */ public class SwitchTheme extends AbstractHandler { private boolean reset = false; private final static String USER_CSS_DEFAULT = "org.eclipse.e4.ui.examples.css.rcp";//plugin.xml中的主题ID private final static String USER_CSS_COLORFUL = "org.eclipse.e4.ui.examples.css.colorful"; public Object execute(ExecutionEvent event) throws ExecutionException { String themeId = ""; if (reset) { // toggle functionality of the menu item themeId = USER_CSS_DEFAULT; } else { themeId = USER_CSS_COLORFUL; } reset = !reset; ThemeHelper.getEngine().setTheme(themeId, true); return null; } }Plugin.xml中设置的command
<extension point="org.eclipse.ui.commands"><!--用户添加菜单项到相应的位置--> <command defaultHandler="org.eclipse.e4.ui.examples.css.rcp.handler.SwitchTheme" id="org.eclipse.e4.ui.examples.css.rcp.switchtheme" name="Switch Theme"><!--切换主题的操作--> </command> </extension><extension point="org.eclipse.ui.menus"> <menuContribution allPopups="false" locationURI="menu:org.eclipse.ui.main.menu"> <menu label="Styling"> <command commandId="org.eclipse.e4.ui.examples.css.rcp.switchtheme" label="Switch Styling" style="push"> </command> </menu> </menuContribution> </extension>
把command绑定到菜单栏中
<extension point="org.eclipse.ui.menus"> <menuContribution allPopups="false" locationURI="menu:org.eclipse.ui.main.menu"> <menu label="Styling"> <command commandId="org.eclipse.e4.ui.examples.css.rcp.switchtheme" label="Switch Styling" style="push"> </command> </menu> </menuContribution> </extension>ApplicationWorkbenchAdvisor 中可以用代码一开始指定某个主题
public void initialize(IWorkbenchConfigurer configurer) { super.initialize(configurer); /**设置系统的默认主题风格*/ Bundle b = FrameworkUtil.getBundle(getClass()); BundleContext context = b.getBundleContext(); ServiceReference serviceRef = context .getServiceReference(IThemeManager.class.getName()); IThemeManager themeManager = (IThemeManager) context .getService(serviceRef); final IThemeEngine engine = themeManager.getEngineForDisplay(Display .getCurrent()); engine.setTheme("org.eclipse.e4.ui.examples.css.rcp", true); if (serviceRef != null) { serviceRef = null; } if (themeManager != null) { themeManager = null; } }css 样式colorful.css
CTabItem, Label, Tree, Text { font-family: "Arial"; } Shell { font-size: 12; } CTabItem, ToolBar, Button, CBanner, CoolBar { font-size: 9; background-color: green; } CTabFolder, CTabItem { background-color: red; } CTabItem:selected { background-color: blue; } Text { font-size: 11; color: #666666; background-color: red; } #navigation { font-size: 8; color: orange; background-color: blue; } .messageBanner { background-color: yellow; } .messageBanner Composite, Label, Link { background-color: pink; } .messageSender { color: #3e9cfa; font-size: 11; } .messageDate { color: #808080; font-size: 9; } .messageSubjectUnRead { font-size: 14; font-style: italic; font-weight: bold; color: red; } .messageSubjectRead { font-size: 12; font-style: normal; font-weight: normal; color: green; }
工程下载:http://download.csdn.net/detail/luoww1/7425369