XML android:fontFamily中的字体不适用于工具栏

时间:2017-10-26 14:35:34

标签: android fonts android-support-library toolbar

我使用了新的XML字体功能,这是在Android 8.0 Oreo中使用支持库26.1.0引入的。通过在应用程序主题中设置android:fontFamily属性来应用整个应用程序的默认字体系列:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
     ...
    <item name="android:fontFamily">@font/proxima_nova</item>
</style>

该字体已正确应用于应用中除工具栏之外的所有视图。所有工具栏都使用Roboto字体:

enter image description here

更新:支持库27.0.0中似乎已解决此问题。我不能再复制它了。

4 个答案:

答案 0 :(得分:8)

我还没有在所有Android版本上测试过,但这似乎有效:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
     ...
    <item name="android:fontFamily">@font/proxima_nova</item>
    <item name="toolbarStyle">@style/AppTheme.Toolbar</item>
</style>

<style name="AppTheme.Toolbar" parent="Widget.AppCompat.Toolbar">
    <item name="titleTextAppearance">@style/AppTheme.ToolbarTextStyle</item>
</style>

<style name="AppTheme.ToolbarTextStyle" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
    <item name="android:fontFamily">@font/proxima_nova</item>
    <item name="fontFamily">@font/proxima_nova</item>
</style>

答案 1 :(得分:0)

我使用这个util方法将不同字体的标题设置到操作栏:

public static CharSequence createSpannableActionBarTitle(Context context, CharSequence title) {
    SpannableString spannedTitle = new SpannableString(title);

    int titleColor = context.getResources().getColor(R.color.white);
    spannedTitle.setSpan(new ForegroundColorSpan(titleColor), 0, spannedTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannedTitle.setSpan(new TypefaceSpan(context, R.string.Roboto_Medium), 0, spannedTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    return spannedTitle;
}

答案 2 :(得分:0)

我花了很长时间来解决这个问题(即使使用支持库27.1.0)。所以,这是我的解决方案:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:fontFamily">@font/proxima_nova</item> <!-- Default app font -->
    <item name="actionBarStyle">@style/Custom.ActionBar</item>
</style>

<style name="Custom.ActionBar" parent="Widget.AppCompat.ActionBar">
    <item name="background">@color/colorPrimary</item>
    <item name="titleTextStyle">@style/Custom.ActionBar.Title</item>
</style>

<style name="Custom.ActionBar.Title" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:fontFamily">@font/proxima_nova_bold</item>
</style>

正如您所看到的,我不是引用Toolbar,而是通过引用ActionBar来实现它。使用上述内容,整个应用程序的默认字体是 Proxima Nova(常规),而工具栏/操作栏设置为Proxima Nova Bold。

某些背景信息:
对于我的生活,我无法使用字体xml工作自定义字体(您应该为常规和粗体设置正常和斜体字体)。因此,代码中的@font/proxima_nova_bold会链接到字体文件本身res/font/proxima_nova_bold.ttf,这可以正常工作。

答案 3 :(得分:0)

如果你像往常一样使用字体

确保活动扩展AppCompatActivity

当我的活动扩展活动时,我的字体无法呈现。