安卓的TextView有一个问题,文本中中英文都有的时候会在出其不意的地方换行。
我的解决办法就是在设置文本之后得到当前textView的文本可用宽度,然后将文本拆开一点点比较宽度,在临界点上加上换行符。
下面就是我的解决方法:
public void handlerText(final TextView tv) {
final String textStr = tv.getText().toString(); //textView文本信息
final Paint textPaint = tv.getPaint();
final float tvWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight(); //文本可用宽度
Thread thread = new Thread(){//文本内容可能比较多 这里开个子线程
@Override
public void run() {
super.run();
//将原始文本转换为char数组
char[] chars = textStr.toCharArray();
StringBuilder sbNewText = new StringBuilder();
int lineLength = 0;
for (char cha : chars) {
int v = (int) textPaint.measureText(String.valueOf(cha));
lineLength += v;
if (lineLength <= tvWidth) {
//如果宽度没超过文本可用宽度那就设置上去
sbNewText.append(cha);
} else {
sbNewText.append("\n");
sbNewText.append(cha);
lineLength = v;
}
}
//发消息替换文本
Message message = new Message();
message.what = 0;
message.obj = sbNewText.toString();
mHandler.sendMessage(message);
}
};
thread.start();
}
这样做其实还是有缺点的,那就是文本最终设置可能不会那么及时,因为需要等到textView可用宽度确定,所以需要等到控件先设置好最开始的文本。而且文本内容过多时可能要等待的时间更久。