Codename One - ScaleImageLabel中不需要的填充/间距

时间:2017-04-07 15:13:28

标签: java user-interface layout codenameone

Codename One的新手,从Android" native" java开发。

我尝试创建一个松散类似于Material侧面菜单的SideMenu设计,就像几乎所有Google应用程序(例如Play商店)中所见。从标题图片开始,我似乎无法摆脱顶部和底部的一些填充:

simulator screenshot

顶部和底部的白条是不需要的。目前的代码:

public void start() {
    if (current != null) {
        current.show();
        return;
    }

    home = new Home();

    // SideMenu header BG image
    Image headerImage = theme.getImage("bg_navdrawer_header.png");
    ScaleImageLabel sideMenuHeaderBg = new ScaleImageLabel(headerImage);
    sideMenuHeaderBg.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FIT);

    // SideMenu header app title
    Label sideMenuHeaderLabel = new Label("Title");
    sideMenuHeaderLabel.setUIID("SideMenuHeaderTitle");

    Container sideMenuHeader = new Container();
    sideMenuHeader.add(LayeredLayout.encloseIn(sideMenuHeaderBg, FlowLayout.encloseBottom(sideMenuHeaderLabel)));
    home.getToolbar().addComponentToSideMenu(sideMenuHeader);

    home.show();
}

如果我使用BACKGROUND_IMAGE_SCALED_FILL,白条会消失,但它不会保持纵横比 - 它会拉伸以填充这两个空格。 (编辑:它 保持宽高比,但它会剪切更长的尺寸)。我已经尝试将UIID设置为" Container"一切都没有区别。

有什么想法吗?

更新

出于某种原因,在设置背景类型后立即调用ScaledImageView上的setWidth解决了它。宽度是什么,任何数字和" letterboxing"都不重要。已经消失,高度应该是应该的。

ScaleImageLabel sideMenuHeaderBg = new ScaleImageLabel(headerImage);
sideMenuHeaderBg.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
sideMenuHeaderBg.setWidth(0);

如果某人有更好的解决方案,或者至少可以解释为什么会出现这种情况,或者至少可以解释为什么会发生这种情况,那么我会解决这个问题,因为我的解决方案更像是一个黑客而不是一个真正的答案。

1 个答案:

答案 0 :(得分:1)

BACKGROUND_IMAGE_SCALED_FILL应该保持宽高比。它调整图像大小以“填充”空间的较短尺寸。剪裁较长的尺寸。

BACKGROUND_IMAGE_SCALED将伸展以填充空间,但不会保持宽高比。

BACKGROUND_IMAGE_SCALED_FIT也会保持宽高比。它调整图像大小以“填充”空间的较长尺寸。较短的尺寸是“letterboxed”,如截图所示。