Фон системного диалога не размыт / почернел ежевики

Я создал dialog.qml вот код:

Dialog {
    id: dialog

    signal sampleSignal(string text);

    attachedObjects: [
        TextStyleDefinition {
            id: titleStyle
            base: SystemDefaults.TextStyles.BigText
            color: Color.create("#60323C")
        },
        TextStyleDefinition {
            id: titleTextStyle
            base: SystemDefaults.TextStyles.TitleText
            color: Color.Black
        }
    ]

    Container {
        id: mainContainer
        preferredWidth: 700 
        layout: DockLayout {}
        verticalAlignment: VerticalAlignment.Center;
        horizontalAlignment: HorizontalAlignment.Center;

        background: Color.create("#f9f7f2")

        Container {
            layout: StackLayout {}
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Center

            Container {
                layout: DockLayout {}
                background: Color.create("#F4E9E1");
                horizontalAlignment: HorizontalAlignment.Fill;
                preferredHeight: 120
                rightPadding: 10
                leftPadding: 10

                Label {
                    text: "Members" ;              
                    verticalAlignment: VerticalAlignment.Center;
                    textStyle{
                        base: titleStyle.style
                    }
                }

                ImageView {            
                    verticalAlignment: VerticalAlignment.Center;
                    horizontalAlignment: HorizontalAlignment.Right;
                    imageSource: "asset:///images/close_button.png"
                    onTouch: {
                        dialog.close();
                    }
                }   
            }
            Container {
                layout: StackLayout {}
                topPadding: 20
                bottomPadding: 20
                rightPadding: 10
                leftPadding: 10

                TextField {
                    id: name
                    hintText: "Add email address"     
                    input {
                        submitKey: SubmitKey.Submit;
                        onSubmitted: {
                            cppObj.onEmailDoneClicked(name.text, "");
                        }
                    }         
                }

                Divider {}             

                ImageButton {
                    id: doneButton
                    defaultImageSource: "asset:///images/button_done.png"
                    horizontalAlignment: HorizontalAlignment.Center;
                    onClicked: {
                        cppObj.onEmailDoneClicked(name.text, "");
                        doneButton.textAdded();
                    }

                    function textAdded() {
                        dialog.sampleSignal(name.text);
                        dialog.close();
                    }
                }
            }
        }
    }
}

и я называю этот диалог здесь

ImageButton {
    id: btnaddmore
    defaultImageSource: "asset:///images/button_add.png"

    onClicked: {
    //controller.showProjectsPage();
    openDialog();
}

Проблема здесь в том, что когда всплывает диалоговое окно, экран не становится черным или размытым, в отличие от того, что мы действительно ожидаем от системного диалогового окна, как будто он всплывает, а фон размывается, как наложение в iOS.

Вот что происходит с текущей сборкой:

введите описание изображения здесь


person kev    schedule 30.07.2013    source источник
comment
Вместо этого используйте системное диалоговое окно. developer.blackberry.com/cascades/documentation/ui/   -  person Konrad Lindenbach    schedule 30.07.2013
comment
Невозможно реализовать внешний вид пользовательского интерфейса для настраиваемого диалогового окна, предоставленного с использованием класса SystemDialog. Единственный возможный способ сделать это - использовать SystemPrompt, однако он все еще довольно ограничен и не может быть изменен дальше.   -  person Sunseeker    schedule 31.07.2013


Ответы (1)


Поскольку вы используете настраиваемый диалог, вам нужно сделать это самостоятельно. Итак, если вы хотите затемнить и отключить все события касания базовой страницы, поместите это там, где вы открываете свой настраиваемый диалог (например, ImageButton):

ImageButton {
    id: btnaddmore
    defaultImageSource: "asset:///images/button_add.png"

    onClicked: {
    //controller.showProjectsPage();

    // --- black out and disable
    underlyingContainer.touchPropagationMode = TouchPropagationMode.None;
    underlyingContainer.opacity = 0.3;
    // --- black out and disable

    openDialog();
}

Аналогично этому, вам нужно будет восстановить элементы управления, когда вы закроете диалоговое окно (в обработчике onBack() - см. Измененный код вашего диалогового окна ниже):

underlyingContainer.touchPropagationMode = TouchPropagationMode.Full;
underlyingContainer.opacity = 1.0;

Вот модифицированный код для вашего диалога с сигналом back(), который излучается, когда вы нажимаете кнопку «x» (если вы правильно поняли код):

Dialog {
    id: dialog

    signal back();
    signal sampleSignal(string text);

    attachedObjects: [
        TextStyleDefinition {
            id: titleStyle
            base: SystemDefaults.TextStyles.BigText
            color: Color.create("#60323C")
        },
        TextStyleDefinition {
            id: titleTextStyle
            base: SystemDefaults.TextStyles.TitleText
            color: Color.Black
        }
    ]

    Container {
        id: mainContainer
        preferredWidth: 700 
        layout: DockLayout {}
        verticalAlignment: VerticalAlignment.Center;
        horizontalAlignment: HorizontalAlignment.Center;

        background: Color.create("#f9f7f2")

        Container {
            layout: StackLayout {}
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Center

            Container {
                layout: DockLayout {}
                background: Color.create("#F4E9E1");
                horizontalAlignment: HorizontalAlignment.Fill;
                preferredHeight: 120
                rightPadding: 10
                leftPadding: 10

                Label {
                    text: "Members" ;              
                    verticalAlignment: VerticalAlignment.Center;
                    textStyle{
                        base: titleStyle.style
                    }
                }

                ImageView {            
                    verticalAlignment: VerticalAlignment.Center;
                    horizontalAlignment: HorizontalAlignment.Right;
                    imageSource: "asset:///images/close_button.png"
                    onTouch: {
                        back();
                        dialog.close();
                    }
                }   
            }
            Container {
                layout: StackLayout {}
                topPadding: 20
                bottomPadding: 20
                rightPadding: 10
                leftPadding: 10

                TextField {
                    id: name
                    hintText: "Add email address"     
                    input {
                        submitKey: SubmitKey.Submit;
                        onSubmitted: {
                            cppObj.onEmailDoneClicked(name.text, "");
                        }
                    }         
                }

                Divider {}             

                ImageButton {
                    id: doneButton
                    defaultImageSource: "asset:///images/button_done.png"
                    horizontalAlignment: HorizontalAlignment.Center;
                    onClicked: {
                        cppObj.onEmailDoneClicked(name.text, "");
                        doneButton.textAdded();
                    }

                    function textAdded() {
                        dialog.sampleSignal(name.text);
                        dialog.close();
                    }
                }
            }
        }
    }
}
person Sunseeker    schedule 31.07.2013
comment
Как я писал ранее, вам нужно включить код для восстановления страницы в предыдущее состояние в некоторый обработчик, вызываемый при закрытии диалога (чтение - испускание некоторого сигнала). Поскольку ваш диалог является настраиваемым, такого обработчика нет, и вам нужно реализовать его самостоятельно. Я сделал это для вас в модифицированном ответе, поэтому надеюсь, что вам ясно, как с этим бороться, если вы знакомы с парадигмой сигнала / слота в QML. - person Sunseeker; 01.08.2013