2016-11-05 4 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 (screenwidth/8), качество изображения bad.If я установил preferredW как emergencyButton.setPreferredW (100), ширина img значительно варьируется в разных устройствах. PS изображения в теме сохраняются как multiImage

ответ

0

Установка предпочтительной ширины/высоты является проблематичной, поскольку она подразумевает обратное измерение и может иметь немало последствий. Я заметил, что вы использовали:

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

который устанавливает ширину на основе предпочтительной высоты вместо width/5 или что-то в этом роде. Он также устанавливает значение на основе предпочтительной высоты до того, как будет построена панель инструментов, так что все будет вести себя по-другому.

Предпочтительная ширина включает прокладку, которая может повлиять на ваш дизайн. Я бы предложил создать в дизайнере UIDID с добавлением/выравниванием по центру 0 и настроить его на все ваши компоненты, чтобы устранить различия в дополнениях/маржах и сократить код.