改变换行行为

pfo*_*han 12 android word-wrap textview

我可以在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"
  />
Run Code Online (Sandbox Code Playgroud)

我如何设置spannable:

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)
Run Code Online (Sandbox Code Playgroud)

ndo*_*ori 7

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

有一个非中断空格字符,所以你需要用这个字符替换你想要牢不可破的所有空格(\ u00A0)

举个例子

String text = "Hello World";
text.replace(' ', '\u00A0');
textView.setText(text);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我已经找到了一个跨度解决方案而找不到一个, WrapTogetherSpan只是一个接口所以它不起作用......

但是使用这种方法,我确信如果你愿意,你可以制作一个自定义的牢不可破的范围.


Bar*_*rak -1

您是否尝试过添加android:singleLine="true"到 XML 中?