我正在HorizontalLayout
Vaadin 12 中尝试垂直对齐。
在我能想象的大多数应用程序中,沿着文本字段的基线排列小部件是有意义的,因为文本字段往往会驱动大多数应用程序的布局,尤其是商业应用程序的布局。
所以我很高兴找到FlexComponent.Alignment.BASELINE
提供HorizontalLayout
。但是当我在 Vaadin 12.0.2 应用程序中尝试它时,基线似乎是除了文本字段之外的所有内容。
这是一个示例应用程序。我下载了生成的基础启动器,只触及了MainView
构造函数的内容。
该应用程序由一个VerticalLayout
由六个HorizontalLayout
对象组成。每个水平条是Label
、TextField
、Button
和Button
。标签和第一个按钮明确设置了垂直对齐方式。
使用另一个窗口的边缘覆盖您现在正在查看的窗口,使用它的顶部边缘像尺子一样。请注意“BASELINE”行是如何将显式设置的小部件(标签和第一个按钮)与字段标题的基线而不是字段本身以及最后一个按钮文本的基线对齐的。
因此,对齐对齐除了文本字段之外BASELINE
的所有内容的基线。这与我的期望和需要完全相反。
➥ 这是功能还是错误?
➥ 我做错了吗?
➥ 有没有办法让小部件与基线对齐TextField
?
作为一个小问题,STRETCH
似乎没有效果。它应该做什么?
代码
package work.basil.example.bugsy;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.PWA;
/**
* The main view contains a button and a click listener.
*/
@Route ( "" )
@PWA ( name = "Project Base for Vaadin Flow",
shortName = "Project Base" )
public class MainView extends VerticalLayout {
public MainView () {
this.setSpacing( true );
this.setMargin( true );
for ( FlexComponent.Alignment a : FlexComponent.Alignment.values() ) {
Label label = new Label( a.name() );
TextField field = new TextField( "field" );
Button alignedButton = new Button( "aligned" );
Button unalignedButton = new Button( "unaligned" );
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.add( label , field , alignedButton , unalignedButton );
// Set vertial alignment of the label and the first button.
horizontalLayout.setVerticalComponentAlignment( a , label );
horizontalLayout.setVerticalComponentAlignment( a , alignedButton );
this.add( horizontalLayout );
}
}
}