我正在尝试将一个简单的Grid
放入带有侧边栏的HorizontalLayout
中(目前只是一个Text
框)
看起来像这样:
class FeedbacksView constructor(private val feedbackService: FeedbackService) : HorizontalLayout() {
private val grid = Grid<FeedbackListModel>().apply {
setItems(feedbackService.fetchFeedbacks())
// add columns ...
}
private val sidebar = VerticalLayout().apply {
add(Text("foo"))
}
init {
width = "100%"
height = "100%"
setFlexGrow(3.0, grid)
setFlexGrow(1.0, sidebar)
add(grid, sidebar)
}
}
,由于某种原因,布局无法填充屏幕,也无法填充网格。 尽管将flex分别设置为3和1,但网格和侧边栏的宽度均为50%。
可能是什么问题?
答案 0 :(得分:1)
问题是:host
上的<vaadin-grid>
指定了flex: 1 1 100%
,此处的重要部分是值为flex-basis
的{{1}}。这就是“让我尽可能大”。垂直布局的宽度为100%,具有auto的flex-basis功能,这也转化为“使我尽可能大”。显然,这会覆盖flex-grow值,并使它共享50%/ 50%的空间。
解决方法是将100%
添加到flex-basis: auto
并将<vaadin-grid>
的宽度设置为VerticalLayout
。然后,它们将保持75%/ 25%的比率(即flex-grow 3/1)。
对于Vaadin 8而言,这绝对是很奇怪的:)我写了一篇博客文章Vaadin 10 layouting for Vaadin 8 devs-您可能会发现它很有用。
ps:您可以使用Karibu-DSL库;那么您将可以按照以下方式重写代码:null