由于使用Android Studio 3.0,您只需将google字体集成到项目(See android walkthrough)。
当你添加一些字体时,Android Studio会为你生成字体文件夹,包括字体的XML文件(在我的例子中是amatic_sc.xml)。 Studio还在value文件夹中创建了preloaded_fonts.xml。
amatic_sc.xml:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
app:fontProviderAuthority="com.google.android.gms.fonts"
app:fontProviderPackage="com.google.android.gms"
app:fontProviderQuery="Amatic SC"
app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>
preloaded_fonts.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="preloaded_fonts" translatable="false">
<item>@font/amatic_sc</item>
</array>
</resources>
当我将以下行static包含到我的xml文件中时,它可以正常工作:
android:fontFamily="@font/amatic_sc"
但在我的情况下,我需要在自定义listAdapter中以编程方式设置字体系列。我尝试了以下代码示例,但没有任何作用:
// Display text with default fontFamily
viewHolder.textView.setTypeface(Typeface.create("@font/amatic_sc", Typeface.NORMAL));
// both throws java.lang.RuntimeException: Font asset not found [../res/]font/amatic_sc.xml
viewHolder.textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "font/amatic_sc.xml"));
viewHolder.textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "../res/font/amatic_sc.xml"));
// both throws java.lang.RuntimeException: Font asset not found [../res/]font/amatic_sc.xml
viewHolder.textView.setTypeface(Typeface.createFromFile("font/amatic_sc.xml"));
viewHolder.textView.setTypeface(Typeface.createFromFile("../res/font/amatic_sc.xml"));
在我的情况下,我使用min SDK版本16 ,我希望我的代码段足够。
感谢您的帮助!
答案 0 :(得分:12)
您可以使用支持库与8之前的Android版本兼容,如下所示:
Typeface typeface = ResourcesCompat.getFont(context,R.font.amatic_sc);
viewHolder.textView.setTypeface(typeface);
更多信息here。
答案 1 :(得分:0)
将资源文件夹中的字体文件保存,然后使用此代码段
Typeface font = Typeface.createFromAsset(mContext.getAssets(), fontPath);
v.setTypeface(font);
notic:字体路径应该是一些东西
的Roboto-Bold.ttf