Android 改变换行行为
我可以在文本视图中使用Spanable创建具有不同外观、下划线、删除线等的跨距。如何更改换行行为?特别是,我不想让一个电子邮件地址在中间包装,我希望它像一个字。 我试过了,但没能成功。看起来它只被DynamicLayout使用,我不能强迫TextView使用DynamicLayoutAndroid 改变换行行为,android,textview,word-wrap,Android,Textview,Word Wrap,我可以在文本视图中使用Spanable创建具有不同外观、下划线、删除线等的跨距。如何更改换行行为?特别是,我不想让一个电子邮件地址在中间包装,我希望它像一个字。 我试过了,但没能成功。看起来它只被DynamicLayout使用,我不能强迫TextView使用DynamicLayout <TextView android:id="@+id/merchant_email_field" android:layout_width="fill_parent" android:layout
<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"
/>
您是否尝试过将android:singleLine=“true”添加到您的XML中?不知道您是否找到了答案,但您可以使用unicode来帮助您 有一个非中断空格字符,因此需要用该字符(\u00A0)替换所有不可中断的空格 例如
String text = "Hello World";
text.replace(' ', '\u00A0');
textView.setText(text);
顺便说一句,我寻找了一个span解决方案,但没有找到,WrapTogetherSpan只是一个接口,所以它不起作用
但是使用这种方法,我相信如果您愿意,您可以定制一个牢不可破的跨度。如果您正在实施一个更低级的解决方案(即,自己绘制文本并处理换行),请参见。
BreakIterator.getLineInstance()
factory方法将电子邮件地址视为单个单元
String text = "My email is me@example.com.";
BreakIterator boundary = BreakIterator.getLineInstance();
boundary.setText(text);
int start = boundary.first();
for (int end = boundary.next(); end != BreakIterator.DONE; end = boundary.next()) {
System.out.println(start + " " + text.substring(start, end));
start = end;
}
输出显示可以接受换行的边界起始索引
0 My
3 email
9 is
12 me@example.com.
另请参见
0 My
3 email
9 is
12 me@example.com.