Android:如何按字符包装文本?(不是用文字)

Android:如何按字符包装文本?(不是用文字),android,textview,word-wrap,Android,Textview,Word Wrap,例如: 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 正如我所知,TextView没有这样的属性。如果您想自己实现文本换行,可以覆盖TextView并使用Paint的功能。请注意,您必须为实例指定文本大小、字体等。这有点

例如:

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

正如我所知,TextView没有这样的属性。如果您想自己实现文本换行,可以覆盖TextView并使用Paint的功能。请注意,您必须为实例指定文本大小、字体等。

这有点老套,但您可以用unicode无中断空格字符(U+00A0)替换空格。这将导致文本被视为单个字符串,并以字符而不是文字换行

myString.replace(“,”\u00A0”)





(黄色背景:普通文本视图)

在每个字符后添加一个不可见的零宽度空格('\u200b'):

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

这也适用于不包含空格的长字符串(例如,链接地址)。标准文本视图试图通过问号“?”和斜杠“/”来断开链接。

以下扩展方法实现了@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"
);
//
///在每个字符后添加零宽度空格。这在按分隔文本时非常有用
///文本视图中的字符而不是单词。
/// 
///要向其中添加零宽度空格的字符串。
///包含零宽度空格的新字符串实例。
公共静态字符串AddZeroWidthSpaces(此字符串值)=>Regex.Replace(
价值
, "."
,“$0\u200b”
);

Hi christian,我正在寻找确切的解决方案,但我无法使用您接受的答案实施。请让我知道如何在文本视图中完成此操作,我不会称之为太多的黑客行为。这不正是这个角色的用意吗?很有魅力,很公平。我称之为黑客解决方案,因为这个功能应该真正内置到TextView中。iOS等效的UILabel允许您设置换行模式,并具有各种换行和截断模式。这只考虑由空格引起的不需要的换行。下面来自atarasenko的答案是真正的问题解决者,因为它还可以解决由于连字符、分号等引起的不必要的换行。注意:如果以后需要使用字符串,可能需要反转“替换”。[这个答案有助于改善我的应用程序中的“结果”显示,但使用getListAdapter().getItem(row).toString().substring(0,20).trim()进行数据库查找时失败,直到我意识到需要反转]谢谢,在Xamarin Android中仍然有效,并且比上述解决方案更好。
textView.setText(longlongText.replaceAll(".(?!$)", "$0\u200b"));
/// <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"
);