当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-06-30
关于TextView设置IconFont赋值String代码无效 症状 我希望做一个配置中心系统, 下发tab栏的配置, 来动态改变tab栏. 这里我选择的是iconFont, 因为他占用的空间更小, 但是我在json传strings.xml相同


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

症状

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

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

症结

  • 难道 getString 里面做了什么处理吗?看了源码, 没发现什么特别的地方。
  • 这八九不离十跟 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~


    上一篇:【Android】DisplayUtil
    下一篇:没有了
    网友评论