2017-02-17 57 views
1

我希望应用程序中的每个文本都是sans-serif-thin,但我不知道如何更改它。我可以将android:fontFamily="sans-serif-thin"添加到TextView,它工作的很好,但我不想在每个活动中更改每个TextView的代码。如何为应用程序中的所有文本设置fontFamily?

我试过<item name="android:fontFamily">sans-serif-thin</item>加入AppTheme样式styles.xml但没有效果。

+0

已应用该主题?您可以通过在Manifest.xml的''字段中添加'android:theme =“@ style/AppTheme”'来为整个应用程序应用主题 – Jack

回答

2

如何为应用程序中的所有文本设置fontFamily?

解决方案

如果你想只使用android-default-font(SANS,衬线,单声道)。

试试这个。

<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库。该库提供了与字体相关的各种功能。

+0

是的,这可以工作。 4分钟,直到我可以接受答案。这是一条非常愚蠢的规则,现在我必须四分钟停留,而不是完成工作。 – TimSim

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 
} 
} 

不要忘了添加机器人:在清单文件的应用程序标记名称=“com.you.yourapp.MyApp”。

添加在主题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); 
    } 
} 
} 
相关问题