【问题标题】:LayerLayout in cn1cn1中的LayerLayout
【发布时间】:2018-10-26 11:01:44
【问题描述】:

我需要在具有背景颜色的组件顶部保留一个图像,以便一半的组件被图像覆盖。因此我使用了 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);

我正在尝试做的事情:

从上面的代码看现在的样子

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    这是我能做的壁橱:

        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 插图。 希望有用。

    【讨论】:

      【解决方案2】:

      这应该可行:

      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);
      

      这假设父母的背景是白色的。

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

      【讨论】:

      • 代码是否完整。我只看到marginBottom 添加到我的代码中
      • 不,它没有用。但是上面答案中的 setInsetTop 有效
      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多