Мне нужен способ разбить текст на строки, такие как TextView. Я видел, что TextView использует Dynamic -/Static -/BoringLayout s для этого.Как Android TextView разбивает текст на строки?
С помощью этой информации я написал свой собственный метод, но разрывы текста не совпадают. Если FontSize действительно мало линии являются длинной :-(
public static String ellipsize(final String text, final TextAppearanceSpan textAppearance, final int avail, final int maxLines) {
if (TextUtils.isEmpty(text)) {
return null;
}
final StringBuilder builder = new StringBuilder();
final TextPaint paint = new TextPaint();
paint.setTextSize(textAppearance.getTextSize());
paint.setTypeface(Typeface.create(textAppearance.getFamily(), textAppearance.getTextStyle()));
final float ellipsisWidth = paint.measureText("\u2026");
final StaticLayout layout = new StaticLayout(text, paint, avail, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true);
final int lineCount = layout.getLineCount();
final int lines = lineCount < maxLines ? lineCount : maxLines;
for (int i = 0; i < lines; i++) {
final int lineStart = layout.getLineStart(i);
final int lineEnd = layout.getLineEnd(i);
String substring = text.substring(lineStart, lineEnd);
if ((i == (maxLines - 1)) && (lineCount > maxLines)) {
final int nextLineStart = layout.getLineStart(i + 1);
final int nextLineEnd = layout.getLineEnd(i + 1);
final String nextSubstring = text.substring(nextLineStart, nextLineEnd);
final String lastLine = substring.concat(nextSubstring);
substring = TextUtils.ellipsize(lastLine, paint, avail - ellipsisWidth, TextUtils.TruncateAt.END, true, null).toString();
}
builder.append(substring);
}
return builder.toString();
}
Я думаю, вы должны смотреть на EditText из исходного кода Android, а й начиная с TextView. Поэтому, возможно, вам придется расширить EditText в соответствии с вашими потребностями. –