【问题标题】:Spannable String Builder not applying fontSpannable String Builder不应用字体
【发布时间】:2021-12-03 04:32:15
【问题描述】:

我正在尝试构建一个应用了两种不同自定义字体的字符串。我已将具有相应字体的两个字符串附加到字符串生成器中,但这对字符串没有任何作用?有谁知道为什么?

private fun createSpannedNameAndComment(name: String, comment: String): SpannableStringBuilder {

    val semiBoldFont = android.graphics.Typeface.create(
        ResourcesCompat.getFont(
            this,
            R.font.josefin_san_semi_bold
        ), android.graphics.Typeface.NORMAL
    )

    val regularFont = android.graphics.Typeface.create(
        ResourcesCompat.getFont(
            this,
            R.font.josefin_san_regular
        ), android.graphics.Typeface.NORMAL
    )

    return SpannableStringBuilder().apply {
        append(name, semiBoldFont, 0)
        append(" ")
        append(comment, regularFont, 0)
    }

}

【问题讨论】:

    标签: android stringbuilder spannablestring spannablestringbuilder


    【解决方案1】:

    您可以使用这个自定义的TypefaceSpan 类:

    class CustomTypefaceSpan constructor(type: Typeface) : TypefaceSpan("") {
    
        private var newType = type
    
        override fun updateDrawState(ds: TextPaint) {
            applyCustomTypeFace(ds, newType)
        }
    
        override fun updateMeasureState(paint: TextPaint) {
            applyCustomTypeFace(paint, newType)
        }
    
        private fun applyCustomTypeFace(paint: Paint, tf: Typeface?) {
            val old: Typeface = paint.typeface
            val oldStyle = old.style
            val fake = oldStyle and tf!!.style.inv()
            if (fake and Typeface.BOLD != 0) paint.isFakeBoldText = true
            if (fake and Typeface.ITALIC != 0) paint.textSkewX = -0.25f
            paint.typeface = tf
        }
    
    }
    

    并将其应用于您的SpannableStringBuilder

    private fun createSpannedNameAndComment(name: String, comment: String): SpannableStringBuilder {
    
        val semiBoldFont = android.graphics.Typeface.create(
            ResourcesCompat.getFont(
                this,
                R.font.josefin_san_semi_bold
            ), android.graphics.Typeface.NORMAL
        )
    
        val regularFont = android.graphics.Typeface.create(
            ResourcesCompat.getFont(
                this,
                R.font.josefin_san_regular
            ), android.graphics.Typeface.NORMAL
        )
    
        return SpannableStringBuilder().apply {
            append(name, CustomTypefaceSpan(semiBoldFont), 0)
            append(" ")
            append(comment, CustomTypefaceSpan(regularFont), 0)
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多