2017-04-07 2 views
1

Neu bei Codename One, Übergang von Android "native" Java-Entwicklung.Codename One - Unerwünschte Auffüllung/Abstand in ScaleImageLabel

Ich versuche ein SideMenu-Design zu erstellen, das dem Material-Seitenmenü ähnelt, wie es in fast jeder Google-App (z. B. Play Store) zu sehen ist. Beginnend mit einem Header-Bild, kann ich nicht scheinen, von einem gewissen Polsterung auf der Ober- und Unterseite loszuwerden:

simulator screenshot

Die weißen Balken am oberen und unteren unerwünscht sind. Aktuelle Code:

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

Die weißen Balken verschwinden, wenn ich BACKGROUND_IMAGE_SCALED_FILL verwenden, aber dann ist es nicht Seitenverhältnis halten - es erstreckt sich die beiden weißen Flächen zu füllen. (BEARBEITEN: Es tut Seitenverhältnis beibehalten, aber es schneidet die längere Dimension). Ich habe versucht, die UIID auf "Container" zu setzen, um alles zu ändern, macht keinen Unterschied.

Irgendwelche Ideen?


UPDATE:

Aus irgendeinem Grund ruft setWidth auf dem ScaledImageView unmittelbar nach dem Hintergrundtyp es gelöst Einstellung. Egal wie breit die Breite ist, eine beliebige Zahl und das "Letterboxing" ist weg und die Höhe ist wie es sein soll.

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

diesen offen, wenn jemand verlassen gehen hat eine bessere Lösung oder zumindest erklären, warum dies der Fall ist, oder genau das, was meine Lösung geschieht da eher einen Hack ist als eine tatsächliche Antwort.

Antwort

1

BACKGROUND_IMAGE_SCALED_FILL sollte das Seitenverhältnis beibehalten. Es ändert die Größe des Bildes, um die kürzere Dimension des Raums zu füllen. Die längere Dimension ist abgeschnitten.

BACKGROUND_IMAGE_SCALED wird strecken, um den Raum zu füllen, aber Seitenverhältnis nicht beibehalten.

BACKGROUND_IMAGE_SCALED_FIT wird auch das Seitenverhältnis beibehalten. Es ändert die Größe des Bildes, um die längere Dimension des Raums zu füllen. Die kürzere Dimension ist "Letterboxed", wie Sie in Ihrem Screenshot sehen.

+0

So FILL hält Seitenverhältnis, nur Clips die längere Dimension. Aber ich will überhaupt keinen Clipping. Ich möchte, dass es die längere Dimension * des Raumes ohne Letterboxing füllt. Woher kommt dieser Briefkasten? Ich möchte nur, dass es gut an die Oberseite passt und nicht den Leerraum an der Unterseite hat. – CosmicDan

+0

Formatieren Sie auch 'StatusBarSideMenu' mit 0 Padding/Rand –