我有一个与设备宽度一样宽的TextView。我有一个可以超过数百个字符的字符串。
我需要在一行中显示的是从该字符串的索引为零到(numCharsWideInTextView - 8)的字符。其余8个字符将用于添加自定义后缀。举例来说:
String label = "How can I get the maximum amount of characters for Single Line
Text view before it ellipsis? (4392)"
String maxChars = 20;
String str = truncate(label, maxChars);
TextView tv = new TextView();
// "How can I get the ma…(#4392)" is what should appear in TextView where #4392 is a sticky suffix
tv.setText(str);
private String truncate(String str, int maxChars) {
String issueId = // Some regEx function to be written
String s = str.subString(0, maxChars)
s += "…" + "(#" + issueId + ")"
return s;
}
我试图不去硬编码或不得不写出不同的资源/维度值。您可以在这里看到我将其硬编码为20.如何在运行时以编程方式对此进行评估?
必须有一种方法,一种函数,它将返回在新行或椭圆形之前适合TextView的字符数。如果TextView处于Portait与Landscape配置中,则值应该不同。
我尝试梳理文档TextView,FontMetrics,Paint等,但没有运气。
答案 0 :(得分:0)
private boolean isTooLarge (TextView text, String newText) {
float textWidth = text.getPaint().measureText(newText);
return (textWidth >= text.getMeasuredWidth ());
}
private int ellipsisedAt(TextView text, String newText) {
for (int i = 0; i < newText.length; i++) {
if (isTooLarge(text, newText.substring(0, i))) {
return i;
}
}
return -1;
}
为什么这不起作用?
修改强>
此外,您可以尝试使用MONOSPACE字体并仅测量一个符号宽度,并随处使用它。更简单的方法,更快的代码