首页 文章

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

提问于
浏览
1

Codename One新手,从Android“原生”java开发转移 .

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

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"到......一切都没有区别 .

有任何想法吗?


UPDATE:

出于某种原因,在设置背景类型后立即调用ScaledImageView上的setWidth解决了它 . 无论宽度是多少,任何数字和“letterboxing”都消失了,高度应该是它应该是的 .

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

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

1 回答

  • 1

    BACKGROUND_IMAGE_SCALED_FILL 应保持纵横比 . 它将图像调整为"fill"空间的较短尺寸 . 剪裁较长的尺寸 .

    BACKGROUND_IMAGE_SCALED 将拉伸以填充空间,但不会保持纵横比 .

    BACKGROUND_IMAGE_SCALED_FIT 也将保持纵横比 . 它将图像调整为"fill"空间的较长尺寸 . 正如您在屏幕截图中看到的那样,较短的维度是"letterboxed" .

相关问题