检索Toast消息高度

时间:2017-01-05 11:22:54

标签: sapui5

在Web应用程序上工作时,我需要显示从WS中检索到的一条或多条警告消息。

出于这个目的,我正在使用sap.m.ToastMessage.show及其偏移属性,因此,如果有多条消息,我可以将它们一个显示在另一个上面。

以下代码实际上对我有用:

    showToastMessages: function(warnings){
        var msgList = warnings.split("|");

        for(var i = 0 ; i < msgList.length; i++){
            var xset = 0 ;
            var yset = -50 + (i * -70);
            sap.m.MessageToast.show(msgList[i],{
                offset: xset.toString() + " " + yset.toString()
            });
        }
    }

但是我想从之前的消息中检索高度,所以我可以这样迭代:

    showToastMessages: function(warnings){
        var msgList = warnings.split("|");
        var msgHeight = 0;

        for(var i = 0 ; i < msgList.length; i++){

            var xset = 0 ;
            var yset = -50 - msgHeight;

            sap.m.MessageToast.show(msgList[i],{
                offset: xset.toString() + " " + yset.toString()
            });
            msgHeight = msgHeight + retrieveMsgToastHeight() + MSG_OFFSET;
        }
    }

所以我可以肯定,使用msgHeight变量的不同消息之间没有重叠。

EDITED

正如Sunil所提出的,我修改了我的功能如下:

    showToastMessages: function(warnings){
        var msgList = warnings.split("|");

        // CONSTANTS
        var PADDING = 25;// 45;     // Padding height of each message
        var CHAR_PER_LINE = 28;     // Aprox. number of characters per line in a toast message
        var HEIGHT_PER_LINE = 20;   // Height in pixels that is each line
        var MSG_OFFSET = 52;        // Vertical offset in order to avoid bottom margin
        var BTW_MSG_OFFSET = 5;     // Separation between messages

        var msgHeight = MSG_OFFSET;

        for(var i = 0 ; i < msgList.length; i++){
            var xset = 0 ;
            var yset = - msgHeight;

            var msgLen = msgList[i].length;
            if(msgLen !== 0){

                var linesNumber = Math.trunc(msgLen/CHAR_PER_LINE) + 1;

                sap.m.MessageToast.show(msgList[i],{
                    offset: xset.toString() + " " + yset.toString()
                });

                msgHeight = msgHeight + linesNumber*HEIGHT_PER_LINE + PADDING + BTW_MSG_OFFSET;
            }
        }
    },

1 个答案:

答案 0 :(得分:0)

您的偏移量应基于消息的长度和<{3}} 的宽度。由于宽度是固定的。您可以计算出每条线的数量(默认情况下约为25-30 Chars 宽度 15em

还要考虑所涉及的padding。(将是不变的)

此处只有变量是您可以决定offset属性的上一条消息的长度。