Например:
This is foo text for wrapping text in TextView
Способ переноса TextView:
This is foo text for
wrapping text in ...
Я хочу этот:
This is foo text for wr
apping text in TextView
Например:
This is foo text for wrapping text in TextView
Способ переноса TextView:
This is foo text for
wrapping text in ...
Я хочу этот:
This is foo text for wr
apping text in TextView
Это немного хакерски, но вы можете заменить пробелы символом пробела без разрыва Unicode (U + 00A0). Это приведет к тому, что ваш текст будет рассматриваться как одна строка и переноситься на символы вместо слов.
myString.replace(" ", "\u00A0");
Насколько я знаю, для TextView такого свойства нет. Если вы хотите реализовать перенос текста самостоятельно, вы можете переопределить TextView и использовать breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth)
. Обратите внимание, что вы должны указать размер текста, шрифт и т. д. для экземпляра Paint.
Добавьте невидимый пробел нулевой ширины ('') после каждого символа:
textView.setText(longlongText.replaceAll(".(?!$)", "$0\u200b"));
Это работает и для длинных строк, не содержащих пробелов (например, адреса ссылок). Стандартный TextView пытается разорвать ссылку по вопросительному знаку '?' и косая черта '/'.
public class CharacterWrapTextView extends TextView {
public CharacterWrapTextView(Context context) {
super(context);
}
public CharacterWrapTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CharacterWrapTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override public void setText(CharSequence text, BufferType type) {
super.setText(text.toString().replace(" ", "\u00A0"), type);
}
}
<com.my.CharacterWrapTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"/>
(желтый фон: обычный текст)
Следующий метод расширения реализует решение @atarasenko на C#, которое может быть полезно для людей, работающих с Xamarin.Android. Результирующая строка будет переноситься в TextView посимвольно.
/// <summary>
/// Add zero-width spaces after each character. This is useful when breaking text by
/// character rather than word within a TextView.
/// </summary>
/// <param name="value">String to add zero-width spaces to.</param>
/// <returns>A new string instance containing zero-width spaces.</returns>
public static string AddZeroWidthSpaces(this string value) => Regex.Replace(
value
, "."
, "$0\u200b"
);