前言
数字加英文混排造成,段落提前换行异常。网上可找到处理方式较多。
处理方式:
1.自定义TextView,测量文字宽度与父窗体宽度自行进行人为换行占主流。
2.全角半角进行统一,将字符串中的半角转换成全角,(转换之后字符宽度变大效果不好)
如图效果:
解决方式:
自定义TextView 有偶发的oom情况,半角字符转全角字符有字体不美观情况。
从字面上看是由于空格导致的提前换行。
六种空格的区别进入
只要将半角的空格转换成全角空格就可以完美解决。oom情况也可以避免掉
如下:
package com.whalefail.myapplication
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import java.io.UnsupportedEncodingException
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val str="start 1111111111111 1111111111111 teacher teacher teacherteacher 1111111 end"
text.text=half2Fullchange(str)
}
/**
* 半角转全角
* @Methods Name half2Fullchange
* @Create In 2012-8-24 By v-jiangwei
* @param QJstr
* @return String
*/
fun half2Fullchange(QJstr: String): String {
val outStrBuf = StringBuffer("")
var Tstr = ""
var b: ByteArray? = null
for (i in 0 until QJstr.length) {
Tstr = QJstr.substring(i, i + 1)
if (Tstr == " ") {
// 半角空格
outStrBuf.append(Tstr)
continue
}
try {
b = Tstr.toByteArray(charset("unicode"))
if (b[2].equals(0)) {
// 半角
b[3] = (b[3] - 32).toByte()
b[2] = -1
outStrBuf.append(String(b, charset("unicode")))
} else {
outStrBuf.append(Tstr)
}
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
}
return outStrBuf.toString()
}
}