如何将自动不适合的单词移动到libgdx标签中的下一行?

时间:2013-08-12 07:55:04

标签: java android libgdx

我的判刑很长。我应该使用除Label之外的其他小部件吗? 当我将Label的文本设置为一个非常大的句子时,标签的最大宽度之后的单词会被切断。

可能的hack是在要移动到String中下一行的位置手动添加“\ n”。但这不可能自动化这个过程。

此图片中的标签很长,其文字如下 -

“我在花园里。\ n我在花园里。我在花园里。”

如何将最后一个字自动移动到同一标签的第三行?

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以计算textview的宽度(仅textview.getWidth()),通过此方法计算实际文本的宽度:

Paint p = new Paint();
p.measureText("your text here");

并比较一起,如果实际文字宽度大于textview宽度,请添加\n

<强>更新 在您的情况下,不是计算整个实际文本,而是逐个字符地计算,总结宽度并与textview宽度进行比较。

完成工作。希望这会有所帮助。

答案 1 :(得分:0)

String insertNewlineChars(String textToDisplay, Float maxLabelWidth, BitmapFont font)
{

    float textWidth=0;
    ArrayList<String> words = new ArrayList<String>(Arrays.asList(textToDisplay.split(" ")));
    String addWordsToSentence;

    //add first word
    String nextWord = words.get(0) ;
    addWordsToSentence = nextWord + " ";
    textWidth = font.getBounds(addWordsToSentence).width;

    //add 2nd to last word
    for(int i=1;i<words.size();i++)
    {
        nextWord = words.get(i);
        textWidth += font.getBounds(nextWord).width;

        //add word to a new line
        if(textWidth >  maxLabelWidth)
        {
            //push to next line
            textWidth = font.getBounds(nextWord).width;
            addWordsToSentence = addWordsToSentence.concat("\n" + nextWord + " ");
        }

        //add word to the same line
        else
        {
            addWordsToSentence = addWordsToSentence.concat(nextWord + " ");
        }

    }
    return addWordsToSentence;

}