2017-04-07 48 views
1

Codename One的新功能,從Android「原生」Java開發轉向。Codename One - ScaleImageLabel中不需要的填充/間距

我正在嘗試創建一個SideMenu設計,它與所有Google應用(例如Play商店)中的Material側面菜單鬆散地類似。一個頭的圖像開始,我似乎無法擺脫對頂部和底部的一些填充的:

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設置爲「容器」以...一切都沒有區別。

任何想法?


UPDATE:

出於某種原因,呼籲ScaledImageView setWidth設置背景類型的解決了這個問題之後。無論寬度是多少,任何數字都可以,「letterboxing」已經消失,高度也應該是這樣。

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

要離開這個開放的情況下,有人有一個更好的解決方案或者至少可以解釋爲什麼是這樣的情況下,或者到底發生了什麼,因爲我的解決方案更是一個黑客比實際的答案。

回答

1

BACKGROUND_IMAGE_SCALED_FILL應保持寬高比。它調整圖像大小以「填充」空間的較短尺寸。較長的維度被剪裁。

BACKGROUND_IMAGE_SCALED將伸展以填充空間,但不會保持寬高比。

BACKGROUND_IMAGE_SCALED_FIT也將保持寬高比。它調整圖像大小以「填充」空間的較長維度。正如你在屏幕截圖中看到的那樣,較短的尺寸是「letterboxed」。

+0

所以FILL確實保持寬高比,只是剪切更長的尺寸。但我根本不想要任何裁剪。我希望它能夠填充空間的更長維度*而不用* letterboxing。這個信箱從哪裏來?我只是希望它緊貼頂部而不是底部的白色空間。 – CosmicDan

+0

同樣風格'StatusBarSideMenu'有0填充/邊距 –