安卓的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(){//文本內(nèi)容可能比較多 這里開個子線程
@Override
public void run() {
super.run();
//將原始文本轉(zhuǎn)換為char數(shù)組
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;
}
}
//發(fā)消息替換文本
Message message = new Message();
message.what = 0;
message.obj = sbNewText.toString();
mHandler.sendMessage(message);
}
};
thread.start();
}
這樣做其實還是有缺點的,那就是文本最終設置可能不會那么及時,因為需要等到textView可用寬度確定,所以需要等到控件先設置好最開始的文本。而且文本內(nèi)容過多時可能要等待的時間更久。