我可以在TextViews中使用Spannable来创建具有不同外观,下划线,删除线等的跨度。我该如何做才能改变换行行为?特别是,我不想将电子邮件地址包装在中间,而是希望它像一个单词一样起作用。

我尝试了WrapTogetherSpan,但是无法正常工作。看起来它仅由DynamicLayout使用,并且我不能强制TextView使用DynamicLayout。

<TextView
  android:id="@+id/merchant_email_field"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:textSize="@dimen/account_setting_email"
  android:gravity="center"
  android:bufferType="spannable"
  android:maxLines="2"
  android:ellipsize="end"
  />

我如何设置跨度:
WrapTogetherSpan TOGETHER_SPAN = new WrapTogetherSpan() {};
String collectedString = getString(R.string.email_sentence, userEmail);
int emailOffset = collectedString.indexOf(userEmail);
Spannable emailSpannable = Spannable.Factory.getInstance()
    .newSpannable(collectedString);
emailSpannable.setSpan(TOGETHER_SPAN, emailOffset,
    emailOffset + userEmail.length(),
    Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(emailSpannable)

最佳答案

不知道是否找到了答案,但是您可以使用unicode来帮助您。

有一个不间断的空格字符,因此您需要用该字符替换所有您希望不可破坏的空格(\u00A0)

举个例子

String text = "Hello World";
text.replace(' ', '\u00A0');
textView.setText(text);

顺便说一句,我一直在寻找一个跨度解决方案,但找不到一个解决方案, WrapTogetherSpan 只是一个接口(interface),因此无法使用...

但是如果您愿意,我可以使用这种方法确定一个自定义的固定跨度。

10-04 23:41