以后再也不用怕特殊字符的显示问题了!
概述
这虽然是一个非常小的功能,但是你不知道的时候真的是头疼的不行。你能和产品说对不起我做不出来,直接用汉字吧!咱们可是有追求的程序猿!!那么看到这,恭喜你,你就保住了自己的尊严。文末有彩蛋,大大的彩蛋!!
福利镇楼
imageEditText 设置单位
这里以在EditText 和 InputLayout 中显示平方米为例,进行说明。
- 首先使用SpannableString 制造出 ㎡
- 由于这只是单位,前面肯定还有内容,但如果直接使用 + 等方式连接,样式就没了。所以使用
spannableStringBuilder
进行连接
/**
*添加单位
* */
private fun addUnit(til: EditText, title: String) {
val spannableStringBuilder = SpannableStringBuilder(title)
spannableStringBuilder.append(squareMeter())
til.hint = squareMeter()
}
/**
*制造单位 ㎡
* */
private fun squareMeter(): SpannableString {
val m2 = SpannableString("m2")
m2.setSpan(RelativeSizeSpan(0.5f), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//一半大小
m2.setSpan(SuperscriptSpan(), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
return m2
}
InputLayout 设置 ㎡
上面的方法,设置EditText 的单位时可以的,但 InputLayout 更为特殊。具体原因没有去研究。应该是样式传输过程中丢失了。那怎么办呢?我也是头疼了很久。感觉找不到好办法。难道去研究InputLayout
的源码?为了这么一个没什么大用的小功能??好像得不偿失吧!
最简单的完美解决解决方案
直接复制 ㎡ 到你需要用的地方,就可以完美解决了。是不是很惊喜?哈哈!当然如果你需要立方米 ,拿去 m³,其他自己去找吧!
最原理,最高大上的解决方案
Android 是支持 Unicode编码 的。那么 你猜到了吗?对的就是使用 Unicode编码。可参考Android中 汉字使用Unicode编码格式表示
比如 元/\u33A5
就元/m³
.
知道你肯定会问,在哪里找到Unicode,也贴心的给你送来了,点我。
总结
Unicode编码
治标治本,标本兼治。不会乱码,不存在哪个控件生效哪个控件不生效,最合时宜!
网友评论