2016-05-15 5 views
1

Ich versuche, eine Nachricht anzuzeigen, die länger als die Bildschirmbreite sein kann. Wie formatiere ich die Nachricht am besten so, dass sie als Multiline angezeigt wird?Formatieren und Anzeigen von Langtext mit Garmin ConnectIQ SDK

Beachten Sie, dass die Nachrichten vom Server kommen, also ist es kein fest codierter Ressourcenstring.

Ich kann keine Werkzeuge dafür sehen, und weder Toybox::WatchUi::Text Zeichensatz noch Dc.drawText scheinen Unterstützung für die Absatzformatierung zu haben.

Dc.getTextDimensions ermöglicht die Breite und Höhe des Textes zu bestimmen, so dass dies möglicherweise hilfreich ist, aber native Anwendungen (z. B. Nachricht Notifier) ​​ordnungsgemäß formatierte Absätze anzeigen, so habe ich eine Impression Ich vermisse etwas.

Antwort

0

I Heuristik gelandet zu berechnen Die maximale Anzahl der Zeichen, die in der Zeile passen, und Verpackungslinie, falls erforderlich:

function formatText(dc, text, width, font) { 
    // characters below worked better than "EeeTtaAooiNshRdlcum " 
    // which I used initially and is based on frequency of characters 
    // in English words 
    var chars = "AbCdEfGhIj"; 
    var oneCharWidth = dc.getTextWidthInPixels(chars, font)/chars.length(); 
    var charPerLine = mListWidth/oneCharWidth; 
    if (text.length() > charPerLine) { 
     var result = text.substring(0, charPerLine); 
     result += "\n"; 
     result += text.substring(charPerLine, text.length()); 
     return [result, 0]; 
    } else { 
     return [text, 1]; 
    } 
} 

Die eigentliche Funktion in meinem Open-Source-Anwendung IQ Connect Garminellohere ist.

0

Ich denke, Sie haben einige manuelle Berechnung auf der Textbreite zu tun mit https://developer.garmin.com/downloads/connect-iq/monkey-c/doc/Toybox/Graphics/Dc.html#getTextWidthInPixels-instance_method

Ich bin fast das gleiche Problem, obwohl für meine Lösung, werde ich Zeichen abgeschnitten, die nicht in denen passen Bildschirmbreite/Textbox Breite

ich bin eine Nutzenfunktion machen die Zeichenfolge berechnen i in eine bestimmte Breite passen, die wie folgt aussehen:

function getTextWidthMaxWidth(dc, text, font, maxWidth) { 
    var dispText = text; 
    //chunk off a char until it fits maxWidth 
    while (dc.getTextWidthInPixels(dispText, font) > maxWidth) { 
     dispText = dispText.subString(0, dispText.Length() - 1); 
    } 
    return dispText; 
} 
Verwandte Themen