简短版本:Vaadin是否支持在正在运行的应用程序中为不同的视图/布局/组件使用不同的主题?
更长版本:我正在尝试实现一些非常基本的功能/“模块化”,其中提供了一个扩展View的类,然后将其添加到特定容器中。目前,使用此处https://stackoverflow.com/a/60775/3560336所示的方法找到一个特定的类,这“正常”。但是这个视图现在将使用我的应用程序的主UI中使用的主题。有没有办法让这个视图(或其他任何可能的东西,例如CustomComponent)使用另一个主题?
答案 0 :(得分:1)
据我所知,主题在运行时可以切换(参见下面的示例代码),但它们是在全局/ UI级别设置的。如果视图完全改变,并且您没有任何不能更改的公共部分,例如菜单栏,这可能对您有用。
public class MyUI extends UI {
@Override
protected void init(VaadinRequest request) {
VerticalLayout content = new VerticalLayout();
content.setSizeFull();
setContent(content);
content.addComponent(new TextField());
content.addComponent(new Button("Switch theme", e -> {
if (getTheme().equals("mytheme1")) {
setTheme("mytheme2");
} else {
setTheme("mytheme1");
}
}));
}
}
否则,主题引擎允许您为各种组件define your own styles(甚至覆盖默认组件)并使用addStyleName()
应用它们:
Java类:
myButton.addStyleName("red-border");
主题配置:
@mixin mytheme1 {
@include valo;
// Insert your own theme rules here
.red-border {
// custom style added with addStyleName()
border: 1px red solid;
}
.v-button {
// global override of default v-button rule
background-color: green;
}
}