为 AppTheme 定义默认值时,是不是可以更改字体系列?

Posted

技术标签:

【中文标题】为 AppTheme 定义默认值时,是不是可以更改字体系列?【英文标题】:Is it possible to change font family when a default is defined for the AppTheme?为 AppTheme 定义默认值时,是否可以更改字体系列? 【发布时间】:2019-01-29 03:09:55 【问题描述】:

我正在应用主题中为我的应用定义默认字体系列,如下所示:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="fontFamily">@font/trade_gothic_ltstd</item>
</style>

但是,对于某些小部件,我想要不同的字体系列。很正常,对吧?好吧,设置android:fontFamily 没有效果。它总是仍然使用默认的贸易哥特字体。如果我从 AppTheme 中删除 fontFamily,那么我所有的 fontFamily 分配都会神奇地开始工作。

要真正改变默认字体,我必须创建下面的样式,并将其作为style=@style/KnockoutFont 应用到任何TextViewEditText 等。

<style name="KnockoutFont" parent="AppTheme">
    <item name="fontFamily">@font/knockout_htf49_liteweight</item>
</style>

这是预期的吗?

【问题讨论】:

您发布了您的问题和答案。想问什么?如果这是否是正确的方法,那么是的。你是对的。 @JacobCelestine 是的,基本上想知道这是否是唯一的方法。我不能总是为事物设置自定义样式,所以这不是一个万无一失的方法。这也是我没有发疯的理智检查,因为我不明白为什么设置默认字体会导致 fontFamily 被忽略。 【参考方案1】:

你所做的是正确的。但是,如果您正在寻找替代方案,您可以尝试在代码中以编程方式为您想要的视图应用字体,如下所示:

//Setting typefaces - this will give stylish fonts
Typeface typeface = Typeface.createFromAsset(getAssets(),"fonts/FONT_NAME.EXTENSION");
textView.setTypeface(typeface);

既然这是在程序中,它应该覆盖主题设置的默认字体。我不确定,但这应该可以。如果您尝试过,请告诉我。

【讨论】:

以上是关于为 AppTheme 定义默认值时,是不是可以更改字体系列?的主要内容,如果未能解决你的问题,请参考以下文章

Android:默认 AppTheme 背景颜色

更改布尔值时无法在 SwiftUI 中更改按钮文本

如何更改新的 TabLayout 指示器颜色和高度

None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素

在 oracle 中更改另一个字段的值时更改表字段的值

Android - 无法更改操作栏文本颜色