2016-11-05 296 views
1

我写了一个自定义工具栏。而且我有艰难的时间让它工作(设计明智)。我有几个关于它的问题。自定义工具栏问题

1)我面临的主要问题是将菜单图标置于其确切的位置。当我在不同的设备上测试它时,它们之间的差距是不同的。我已经使用了表格布局和网格布局以及菜单图标&分层布局的标识,但结果不好。

代码:

void addTitle(Form form, Resources theme) { 
    Toolbar toolbar = new Toolbar(); 
    form.setToolbar(toolbar); 

    Container containerTitle = new Container(new BorderLayout()); 
    Image titleImage = theme.getImage("toolbar_bg.jpg"); 
    containerTitle.getAllStyles().setBgImage(titleImage); 
    containerTitle.getAllStyles().setBackgroundType(Style.BACKGROUND_IMAGE_TILE_HORIZONTAL); 
    containerTitle.setPreferredH(titleImage.getHeight()); 

    ScaleImageButton ruslanLogo = new ScaleImageButton(); 

    toolbar.setTitleComponent(LayeredLayout.encloseIn(containerTitle, 
      FlowLayout.encloseCenter(ruslanLogo))); 
    Image ruslanLogoImage = theme.getImage("ruslanLogo.png").scaledWidth(toolbar.getPreferredH() - 180); 
    ruslanLogo.setIcon(ruslanLogoImage); 

    Image emergencyImage = theme.getImage("emergency.png"); 
    Image receipeImage = theme.getImage("receipe.png"); 
    Image fmImage = theme.getImage("fm.png"); 
    Image gameImage = theme.getImage("game.png"); 

    TableLayout tableLayout = new TableLayout(1, 5); 
    //GridLayout gridLayout = new GridLayout(5); 
    Container tableContainer = new Container(tableLayout); 

    Button emergencyButton = getButton(emergencyImage); 
    emergencyButton.getAllStyles().setAlignment(Label.CENTER); 

    Button fmButton = getButton(fmImage); 
    fmButton.getAllStyles().setAlignment(Label.CENTER); 

    Button gameButton = getButton(gameImage); 
    gameButton.getAllStyles().setAlignment(Label.CENTER); 

    Button receipeButton = getButton(receipeImage); 
    receipeButton.getAllStyles().setAlignment(Label.CENTER); 

    Button transparentButton = getButton(receipeImage); 
    transparentButton.getAllStyles().setAlignment(Label.CENTER); 
    transparentButton.setVisible(false); 

    tableContainer.addComponent(tableLayout.createConstraint().widthPercentage(20), BoxLayout.encloseY(emergencyButton)); 
    tableContainer.addComponent(tableLayout.createConstraint().widthPercentage(20), BoxLayout.encloseY(fmButton)); 
    tableContainer.addComponent(tableLayout.createConstraint().widthPercentage(20), BoxLayout.encloseY(transparentButton)); 
    tableContainer.addComponent(tableLayout.createConstraint().widthPercentage(20), BoxLayout.encloseY(gameButton)); 
    tableContainer.addComponent(tableLayout.createConstraint().widthPercentage(20), BoxLayout.encloseY(receipeButton)); 
    containerTitle.addComponent(BorderLayout.SOUTH, tableContainer); 
    toolbar.revalidate(); 
} 

2)我已经确认的宽度和优选的宽度,它们是不同的。它会影响设计吗?

int width = emergencyButton.getWidth(); //60 
int preferredwidth = emergencyButton.getPreferredW(); //74 

3)在上面的代码中,我使用了bg图片高度来设置工具栏的高度。 “containerTitle.setPreferredH(titleImage.getHeight());”这是设定身高的好方法吗?因为我测试过的android手机的高度略有变化,但是它在标签中看起来非常大,我在不同的模拟器上测试过它,高度差别很大。您如何在普通工具栏中设置工具栏高度?

Image titleImage = theme.getImage("toolbar_bg.jpg"); 
containerTitle.getAllStyles().setBgImage(titleImage); 
containerTitle.getAllStyles().setBackgroundType(Style.BACKGROUND_IMAGE_TILE_HORIZONTAL); 
containerTitle.setPreferredH(titleImage.getHeight()); 

ScaleImageButton ruslanLogo = new ScaleImageButton(); 

toolbar.setTitleComponent(LayeredLayout.encloseIn(containerTitle, 
     FlowLayout.encloseCenter(ruslanLogo))); 

4)如何设置图标的宽度?

Image emergencyImage = theme.getImage("emergency.png"); 
Button emergencyButton = getButton(emergencyImage); 

,如果我只是这样做,一些设备的图标过big.If我缩放如:emergencyImage.scaledWidth(屏幕宽度/ 8),图像质量不好。如果我设置preferredW喜欢emergencyButton.setPreferredW (100)中,img宽度在不同设备中变化很大。 PS主题中的图像被保存为多图像

回答

0

设置首选的宽度/高度是有问题的,因为它意味着反向维度并且可能具有相当多的含义。我注意到你用:

Image ruslanLogoImage = theme.getImage("ruslanLogo.png").scaledWidth(toolbar.getPreferredH() - 180); 

这台基于首选高度,而不是width/5或类似的东西宽度。它还会在工具栏构造完成之前根据首选高度设置值,以使事情行为不同。

首选宽度包含可能会影响您设计的填充。我建议在设计器中创建一个中心对齐的填充/边距UIID,并将其设置到所有组件以消除填充/边距差异并缩短代码。