【问题标题】:Setting typeface to TextView removes my font and sets it to default将字体设置为 TextView 会删除我的字体并将其设置为默认字体
【发布时间】:2022-11-19 10:32:29
【问题描述】:

我通过设置typeface = Typeface.DEFAULT_BOLD 将文本加粗。它有效,但我的字体 (Montserrat) 变为默认字体 (Roboto)。如何在不影响字体的情况下更改粗体?

字体设置函数:

fun setTabTypeface(tab: TabLayout.Tab, typeface: Typeface?) {
    for (i in 0 until tab.view.childCount) {
        val tabViewChild: View = tab.view.getChildAt(i)
        if (tabViewChild is TextView) tabViewChild.typeface = typeface
    }
}

我怎么称呼它:

fun TabLayout.onTabSelectedListener(
    onFollowClickListener: ((String) -> Unit),
) {
    this.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
        override fun onTabSelected(tab: TabLayout.Tab) {
            setTabTypeface(tab, Typeface.DEFAULT_BOLD)
        }

        override fun onTabUnselected(tab: TabLayout.Tab?) {
            tab?.let { setTabTypeface(tab, Typeface.DEFAULT) }
        }

        override fun onTabReselected(tab: TabLayout.Tab?) {
        }
    })
}

我只在这里指定字体:

<resources>
    <!-- Base application theme. -->
    <style name="Theme.MyTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor">@color/status_bar_white</item>
        <item name="android:windowLightStatusBar">true</item>
        <item name="android:fontFamily">@font/montserrat</item>
        <!-- Customize your theme here. -->
        <item name="fontFamily">@font/montserrat</item>
    </style>

</resources>

【问题讨论】:

    标签: android string kotlin fonts textview


    【解决方案1】:

    那么,调用Typeface.NORMALTypeface.BOLD 会创建一个没有任何自定义字体的预设字体,并且只设置字体粗细。您要做的是首先使用 montserrat 字体创建字体,然后使用该字体和指定的字重创建字体。

    基本上是这样的:

    val montserratTypeface = Typeface.createFromAsset(assets, "fonts/montserrat.ttf")
    
    // params: typeface family, weight(700 is bold, 400 is normal), boolean italic
    val boldMontserratTypeface = Typeface.create(montserratTypeface, 700, false)
    

    应该有直接用fontfamily和weight创建字体的方法,不过字体类我没仔细查过,你可以研究一下here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多