Android TextView 中英文排版换行问题

安卓的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可用宽度确定,所以需要等到控件先设置好最开始的文本。而且文本内容过多时可能要等待的时间更久。

你可能感兴趣的:(Android TextView 中英文排版换行问题)