Java / Vaadin - 为各个视图使用不同的主题

时间:2016-07-21 12:15:41

标签: java vaadin

简短版本:Vaadin是否支持在正在运行的应用程序中为不同的视图/布局/组件使用不同的主题?

更长版本:我正在尝试实现一些非常基本的功能/“模块化”,其中提供了一个扩展View的类,然后将其添加到特定容器中。目前,使用此处https://stackoverflow.com/a/60775/3560336所示的方法找到一个特定的类,这“正常”。但是这个视图现在将使用我的应用程序的主UI中使用的主题。有没有办法让这个视图(或其他任何可能的东西,例如CustomComponent)使用另一个主题?

1 个答案:

答案 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");
            }
        }));
    }
}

Vaadin theme switching

否则,主题引擎允许您为各种组件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;
  }
}

Button styling