【Android】关于TextView设置IconFont赋值String代码无效

关于TextView设置IconFont赋值String代码无效

症状

在这里插入图片描述

  • 我希望做一个配置中心系统, 下发tab栏的配置, 来动态改变tab栏. 这里我选择的是iconFont, 因为他占用的空间更小, 但是我在json传strings.xml相同的编码时,发现不对, 字体并没有改变
  • 但是通过context.getString, 却能正常显示为右图, 什么原因呢?

症结

  1. 难道 getString 里面做了什么处理吗?看了源码, 没发现什么特别的地方。
  2. 这八九不离十跟 unicode 字符有关. 把代码稍改一下

How To Solve?

setText("\ue6f2");// "&#x" 替换成 "\u",用 unicode 字符来表示  

这里还有一个问题:

  • 你自己转化拼接的String->“\ue6f2” ,setText是无效的, 还是unicode的问题
  • 我这里也提供一个方法, 助小伙伴们解决这个问题

UtilKString

fun string2Unicode(str: String): String {
    if (str.isEmpty()) return ""
    val stringBuffer = StringBuffer()
    if (str.startsWith("&#x")) {
        val hex = str.replace("&#x", "").replace(";", "").trim()
        val data = Integer.parseInt(hex, 16)
        stringBuffer.append(data.toChar())
    } else if (str.startsWith("&#")) {
        val hex = str.replace("&#", "").replace(";", "").trim()
        val data = Integer.parseInt(hex, 10)
        stringBuffer.append(data.toChar())
    } else if (str.startsWith("\\u")) {
        val hex = str.replace("\\u", "").trim()
        val data = Integer.parseInt(hex, 16)
        stringBuffer.append(data.toChar())
    } else {
        return str
    }

    return stringBuffer.toString()
}

解决!!!Bingo~

猜你喜欢

转载自blog.csdn.net/weixin_42473228/article/details/124521246