我希望应用中的每个文字都是sans-serif-thin
,但我不知道如何更改它。我可以将android:fontFamily="sans-serif-thin"
添加到TextView
并且效果很好,但我不想在每个活动中更改每个TextView的代码。
我尝试将<item name="android:fontFamily">sans-serif-thin</item>
添加到AppTheme
中的styles.xml
样式,但不起作用。
答案 0 :(得分:2)
如何为应用中的所有文字设置fontFamily?
<强>解决方案强>
如果你只想使用android-default-font
(sans,serif,mono)。
试试这个。
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<style name="MyTextViewStyle" parent="android:Widget.TextView">
<item name="android:fontFamily">sans-serif-thin</item>
</style>
其他强>
如果要将custom font
指定为默认字体,可以使用Calligraphy库。该库提供了与字体相关的各种功能。
答案 1 :(得分:0)
如果您需要为Android应用程序中的所有TextView设置一种字体,您可以使用此解决方案。它将覆盖所有TextView的字体,包括操作栏和其他标准组件,但EditText的密码字体不会被覆盖。
public class MyApp extends Application {
@Override
public void onCreate() {
TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/Roboto-Regular.ttf"); // font from assets: "assets/fonts/Roboto-Regular.ttf
}
}
别忘了添加android:name =&#34; com.you.yourapp.MyApp&#34;在Manifest文件的应用程序标签中。
在style.xml中添加主题
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
<!-- you should set typeface which you want to override with TypefaceUtil -->
<item name="android:typeface">serif</item>
</style>
</resources>
创建一个类TypefaceUtil.java
import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;
import java.lang.reflect.Field;
public class TypefaceUtil {
/**
* Using reflection to override default typeface
* NOTICE: DO NOT FORGET TO SET TYPEFACE FOR APP THEME AS DEFAULT TYPEFACE WHICH WILL BE OVERRIDDEN
* @param context to work with assets
* @param defaultFontNameToOverride for example "monospace"
* @param customFontFileNameInAssets file name of the font from assets
*/
public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
try {
final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);
final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
defaultFontTypefaceField.setAccessible(true);
defaultFontTypefaceField.set(null, customFontTypeface);
} catch (Exception e) {
Log.e("Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
}
}
}