我使用了新的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字体:
更新:支持库27.0.0中似乎已解决此问题。我不能再复制它了。
答案 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
当我的活动扩展活动时,我的字体无法呈现。