Как установить фоновое изображение для диалога?

Я пытаюсь сделать это:

public class DialogMenuHawaii extends Dialog {

    Style s = UiFactory.getBaseStyle();
    s.setBgTransparency(0);
    s.setBgImage( <my image >);
    this.setUnselectedStyle(s);
}

но это не работает.


person Tim    schedule 29.11.2011    source источник


Ответы (3)


Откройте файл .res в редакторе ресурсов и выберите предпочитаемую тему,

  1. На вкладке «Не выбрано» откройте стиль DialogContentPane, если у вас его нет, создайте его, посмотрите в конце этого ответа КАК ЭТО СДЕЛАТЬ? и установите фоновое изображение на нужное вам изображение. показать как Dialog bg
  2. На вкладке «Не выбрано» откройте стиль DialogBody, если у вас его нет, создайте его, посмотрите в конце этого ответа КАК ЭТО СДЕЛАТЬ? и установите прозрачность фона как « 0', а также убедитесь, что тип фонового изображения НЕТ

ПРИМЕЧАНИЕ. Приведенный выше код будет отображаться для всех диалогов в вашем приложении. Если вам нужен конкретный диалог с фоновым изображением, создайте новые стили из этих стилей по умолчанию и выполните описанные выше шаги, чтобы применить его к своему DialogMenuHawaii или любым диалоговым окнам среды выполнения.

КАК: я бы порекомендовал вам ознакомиться с сообщениями блога Shai Учебное пособие по редактору ресурсов LWUIT, часть 1 — часть 10. Чтобы лучше понять функции и возможности редактора ресурсов.

:

:

:

PS: Программно я не смог добиться этого с помощью TextArea, что характерно для диалоговых окон по умолчанию. Если вы замените компонент тела диалога на Label, если он работает нормально, пример кода приведен ниже. Я особо не вникал, почему так? возможно, сделаю это в свободное время. Поэтому я предложил рабочее альтернативное решение, которое написано выше с помощью Resource Editor и ниже с использованием кода

class MyDialog extends Dialog {

    public void show() {
        Container octnPane = this.getDialogComponent();
        octnPane.getUnselectedStyle().setBgTransparency(0, false);

        Container ctnPane = (Container)((BorderLayout)octnPane.getLayout()).getCenter();
        ctnPane.getUnselectedStyle().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED, false);
        ctnPane.getUnselectedStyle().setBgImage(myImage, false);

        Label t = new Label("Dialog");
        t.setUIID("DialogBody");
        t.getUnselectedStyle().setBgTransparency(0, false);
        ctnPane.addComponent(t);

        super.show();
    }
}
person Vimal    schedule 29.11.2011
comment
Другой способ применить эти настройки к определенному диалоговому окну — установить UIID в коде и использовать этот UIID в Редакторе ресурсов. - person pheromix; 30.11.2011
comment
Я не использую тему в своем проекте, подробно расскажу как применить тему только к моему диалогу. - person Tim; 30.11.2011
comment
@ Тим, я улучшил свой ответ, чтобы решить твою проблему. Я бы порекомендовал вам просмотреть сообщения в блоге Шай ссылка Часть 1 - Часть 10. Чтобы лучше понять Редактор ресурсов, его функции и возможности. - person Vimal; 30.11.2011

Во-первых, я предлагаю вам использовать тему. Мы постоянно меняем мелкие детали реализации, например. настройки, подобные той, которую вы делаете, не будут переносимы между LWUIT 1.4 и 1.5. Нет никаких причин не использовать тему для чего-то подобного.

Если вы заинтересованы в боли и страданиях ручного кодирования логики представления в вашем приложении, вы можете использовать несколько методов, таких как getDialogComponent(), чтобы получить от них стиль и манипулировать им. Диалог — сложный зверь из-за того, что на самом деле это форма, отодвинутая от краев.

person Shai Almog    schedule 01.12.2011

Это для фона диалога.

Dialog dialog = new Dialog();
dialog.getDialogStyle().setBgImage(Image.createImage("/image/image.png"));

Если вы хотите установить прозрачность Диалога с изображением.

dialog.getStyle().setBgImage(Image.createImage("/image/image.png");
person Saunik Singh    schedule 08.05.2012