cn1中的LayerLayout

时间:2018-10-25 07:49:43

标签: codenameone

我需要将图像保留在具有背景色的组件顶部,以便组件的一半被图像覆盖。因此,我使用了layerlayout,但是它不起作用。请查看下面的代码和图像。

代码:

super(new BoxLayout(BoxLayout.Y_AXIS));
Container servicestatContainer = BoxLayout.encloseY();
servicestatContainer.getAllStyles().setBgColor(0x01579b);
servicestatContainer.getAllStyles().setBgTransparency(255);
servicestatContainer.getAllStyles().setPadding(5, 5, 5, 5);
servicestatContainer.getAllStyles().setMarginTop(0);
servicestatContainer.getAllStyles().setMarginBottom(0);

Label imageLabel = new Label(res.getImage("home_car.png").scaledWidth(Display.getInstance().getDisplayWidth()-50),"Button");
add(LayeredLayout.encloseIn(
        servicestatContainer,
        BorderLayout.south(FlowLayout.encloseCenterBottom(imageLabel))
));
//this doesn't work
servicestatContainer.setHeight(imageLabel.getPreferredH()/2);
System.out.println("carHeight " + imageLabel.getPreferredH()/2);

我要做什么:

enter image description here

上面的代码现在看起来是什么

enter image description here

2 个答案:

答案 0 :(得分:2)

这是我能做的壁橱:

    super(new BoxLayout(BoxLayout.Y_AXIS));
    Label imageLabel = new Label(res.getImage("home_car.png").scaledWidth(Display.getInstance().getDisplayWidth()-50),"Button");
    Image background = Image.createImage(Display.getInstance().getDisplayWidth(), imageLabel.getPreferredH(), 0xff01579b);
    Container servicestatContainer = BoxLayout.encloseY();
    servicestatContainer.getAllStyles().setPadding(5, 5, 5, 5);
    servicestatContainer.getAllStyles().setMarginTop(0);
    servicestatContainer.getAllStyles().setMarginBottom(0);
    servicestatContainer.add(new Label(background));        
    LayeredLayout ll = new LayeredLayout();        
    Container contLayered = new Container(ll);
    contLayered.addAll(servicestatContainer, imageLabel);
    ll.setInsetTop(imageLabel, imageLabel.getPreferredH() / 2 + "px");
    ll.setReferenceComponentTop(imageLabel, servicestatContainer);
    add(contLayered);

键正在播放LayeredLayout插图。 希望它有用。

答案 1 :(得分:0)

这应该有效:

Container servicestatContainer = BoxLayout.encloseY();
Style s = servicestatContainer.getAllStyles();
s.setBgColor(0x01579b);
s.setBgTransparency(255);
s.setPadding(5, 5, 5, 5);
s.setMarginUnit(Style.UNIT_TYPE_DIP);
s.setMarginTop(0);
s.setMarginBottom(12);

假设父母的背景是白色。

这之前对您不起作用的原因是,您将蓝色容器放置在图像下方,并且由于分层布局,它们的大小相同。