美文网首页Android开发经验谈Android技术知识
以后再也不用怕特殊字符的显示问题了!

以后再也不用怕特殊字符的显示问题了!

作者: ifjgm | 来源:发表于2019-10-12 22:43 被阅读0次

    以后再也不用怕特殊字符的显示问题了!

    概述

    这虽然是一个非常小的功能,但是你不知道的时候真的是头疼的不行。你能和产品说对不起我做不出来,直接用汉字吧!咱们可是有追求的程序猿!!那么看到这,恭喜你,你就保住了自己的尊严。文末有彩蛋,大大的彩蛋!!

    福利镇楼

    image

    EditText 设置单位

    这里以在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编码 治标治本,标本兼治。不会乱码,不存在哪个控件生效哪个控件不生效,最合时宜!

    相关文章

      网友评论

        本文标题:以后再也不用怕特殊字符的显示问题了!

        本文链接:https://www.haomeiwen.com/subject/yutbyctx.html