0

我有动态文本。问题是它们都应该放在一条线上。有没有办法可以找出android设备是否会用换行符制作文本以显示整个文本?

基本上我想要做的是,如果设备无法在一行上显示全部内容,则缩短文本。这可能吗?

目前我只是显示数据,并且每次太长时都会换行。我发现我可以在 15 个字符后拆分字符串,但我想让它取决于屏幕宽度。

我以为我可以得到屏幕宽度,但是呢?对此有什么建议吗?

4

2 回答 2

1

你是这个意思吗?

TextView.setLines(1);

您还可以在 XML 文件中设置行数。这样你总是有一条线,如果它太长,它会在最后设置三个点。

编辑:

TextView.setLines(1); // Sets the number of lines for your textview
int start = textView.getLayout().getLineStart(1); // Gets the index for the start position of your text.
int end = textView.getLayout().getLineEnd(1); // Gets the index for the end position of the first line.
String date = "| 18 Oktober 2013 |"; // I don't know how you get the date so this is an example

//Set the text with only the first line and date, so you only have one line with the date.
textView.setText(textView.getText().substring(start, end - date.length()) + date); 
于 2013-10-18T14:40:32.667 回答
0

要知道要显示的字符串的宽度(以像素为单位),您需要获取字体的度量,然后使用它来计算给定字符串的长度。例如,您可能有:

FontMetrics metrics =  this.getFontMetrics(theFont);
int width = metrics.stringWidth("sample string");

现在,我不确定你想做什么,但假设你想截断字符串然后在它后面添加“...”,那么你可能想要使用类似的东西:

FontMetrics metrics =  this.getFontMetrics(theFont);
int maxWidth = /* Get the field's width */;
String myString = "sample string";

if (metrics.stringWidth(myString) > maxWidth) {
    do {
        myString = myString.substring(0, myString.length - 1);
    } while (metrics.stringWidth(myString + "…") > maxWidth)
    myString = myString + "…";
}

请注意,此方法在处理短字符串时应该可以正常工作。对于较长的文本,有一种更快的方法,这意味着使用 AttributedString 和 LineBreakMesurer。看看Oracle 的 Text API Trail

于 2013-10-18T14:47:24.757 回答