我有动态文本。问题是它们都应该放在一条线上。有没有办法可以找出android设备是否会用换行符制作文本以显示整个文本?
基本上我想要做的是,如果设备无法在一行上显示全部内容,则缩短文本。这可能吗?
目前我只是显示数据,并且每次太长时都会换行。我发现我可以在 15 个字符后拆分字符串,但我想让它取决于屏幕宽度。
我以为我可以得到屏幕宽度,但是呢?对此有什么建议吗?
你是这个意思吗?
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);
要知道要显示的字符串的宽度(以像素为单位),您需要获取字体的度量,然后使用它来计算给定字符串的长度。例如,您可能有:
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。