Android: как обернуть текст символами?(Не словами) - PullRequest
14 голосов
/ 25 февраля 2011

Например:

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

Ответы [ 5 ]

27 голосов
/ 30 марта 2011

Это немного странно, но вы можете заменить пробелы символом пробела Unicode без пробелов (U + 00A0). Это приведет к тому, что ваш текст будет рассматриваться как одна строка и переносится на символы вместо слов.

myString.replace(" ", "\u00A0");

6 голосов
/ 26 февраля 2011

Как я знаю, для TextView такого свойства нет. Если вы хотите реализовать перенос текста самостоятельно, вы можете переопределить TextView и использовать функцию Paint breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth). Обратите внимание, что для Paint instance.

необходимо указать размер текста, шрифт и т. Д.
4 голосов
/ 19 сентября 2017

Добавьте невидимый пробел нулевой ширины ('\ u200b') после каждого символа:

textView.setText(longlongText.replaceAll(".(?!$)", "$0\u200b"));

Это также работает для длинных строк без пробелов (например, адресов ссылок). Стандартный TextView пытается разорвать ссылку на вопросительный знак '?' и косая черта '/'.

2 голосов
/ 19 октября 2016
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"/>

enter image description here

(желтый фон: нормальный просмотр текста)

0 голосов
/ 12 декабря 2018

Следующий метод расширения реализует решение @ 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"
);
...