LayerLayout в cn1 - PullRequest
       8

LayerLayout в cn1

0 голосов
/ 25 октября 2018

Мне нужно держать изображение поверх компонента с цветом фона, чтобы половина компонента была покрыта изображением.Поэтому я использовал 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 голосов
/ 26 октября 2018

Это должно работать:

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

Предполагается, что фон родительского элемента белый.

Причина, по которой это ранее не работало, заключается в том, что вы поместили синий контейнер нижеизображение и оба они имеют одинаковый размер из-за многослойного макета.

0 голосов
/ 26 октября 2018

Это шкаф, который я смог сделать:

    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.Надеюсь, это полезно.

...