Codename One新手,从Android“原生”java开发转移 .
我正在尝试创建一个松散类似于Material侧面菜单的SideMenu设计,就像几乎所有Google应用程序(例如Play商店)中所见 . 从 Headers 图片开始,我似乎无法摆脱顶部和底部的一些填充:
顶部和底部的白色条纹是不需要的 . 当前代码:
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 回答
BACKGROUND_IMAGE_SCALED_FILL
应保持纵横比 . 它将图像调整为"fill"空间的较短尺寸 . 剪裁较长的尺寸 .BACKGROUND_IMAGE_SCALED
将拉伸以填充空间,但不会保持纵横比 .BACKGROUND_IMAGE_SCALED_FIT
也将保持纵横比 . 它将图像调整为"fill"空间的较长尺寸 . 正如您在屏幕截图中看到的那样,较短的维度是"letterboxed" .