2016-05-15 16 views
1

画面の幅よりも長いメッセージを表示しようとしています。メッセージを複数行で表示するための最良の方法は何ですか?Garmin ConnectIQ SDKを使用してテキストを書式設定して表示する方法

メッセージはサーバーから送信されるため、ハードコードされたリソース文字列ではありません。

Toybox::WatchUi::Text drawableもDc.drawTextも段落書式のサポートを受けていないようです。

Dc.getTextDimensionsではテキストの幅と高さを判断できますが、これは参考になる可能性がありますがネイティブアプリ(メッセージ通知機能など)では正しく書式設定された段落が表示されるため、何か不足しているような印象を受けます。

答えて

0

を私が計算するヒューリスティックを使用して終了行に収まる文字の最大数、および必要に応じてラッピングライン:

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]; 
    } 
} 

IQ Connect Garminelloアプリケーションがhereである私のオープンソースの実際の機能。

0

は、私はあなたが私の解決策のために、私はに収まらない文字を切り落としますが、私はほとんど同じ問題に直面しています https://developer.garmin.com/downloads/connect-iq/monkey-c/doc/Toybox/Graphics/Dc.html#getTextWidthInPixels-instance_method

を使用してテキスト幅にいくつかの手動計算をしなければならないと思います画面幅/テキストボックスの幅

私は、私はこのようになります。特定の幅に収まることができる文字列を計算するユーティリティ関数を作ってるんだ:

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; 
} 
関連する問題