Android – 如何设置整个应用程序的自定义字体

可能重复:
是否可以为整个应用程序设置字体

我需要为整个应用程序设置自定义字体(.ttf格式),我该怎么做? 如果可能,从清单或XML将是最好的select

编辑2014年9月:

对于任何人仍然看到这个可怕的答案,真正的,好的答案在这里:

https://stackoverflow.com/a/16883281/1154026


旧:

你最好的select是这样的:

自定义Android字体

所以

TextView text = (TextView) findViewById(R.id.custom_font); Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf"); text.setTypeface(font); 

与“资产”文件夹的根目录中的.ttf。

你可以这样做。 创build一个自定义的textview,并在任何地方使用

 public class MyTextView extends android.widget.TextView { public MyTextView(Context context) { this(context, null); } public MyTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); if (this.isInEditMode()) return ; final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle); final String customFont = a.getString(R.styleable.SomeStyle_font); //Build a custom typeface-cache here! this.setTypeface( Typeface.createFromAsset(context.getAssets(), customFont) ); } } 

将此添加到attrs.xml

 <declare-styleable name="SomeStyle"> <attr name="font" format="string" /> </declare-styleable> 

然后在你的主题中,这样做:这将确保所有的textviews将使用样式MyTextView

 <item name="android:textViewStyle">@style/MyTextView</item> 

现在我们可以用这种风格的自定义属性来定义自定义字体。

 <style name="MyTextView" parent="@android:style/Widget.TextView"> <item name="font">MyPathToFontInAssets.ttf</item> </style> 

所以,无论何时在项目中使用MyTextView,它都将具有您的自定义字体。

重要提示:字体不会被caching,所以如果你打算使用这个代码,你也应该build立一个自定义的字体caching,这样你就可以重新使用所有文字视图的自定义字体。 这将显着加速应用程序!

更新:正如Amir所说,这几乎是自定义字体和XML布局(Android)相同,但我也使用Android样式自动使用它在应用程序的所有文字。

设置一个TextView子类并在任何地方使用它

  public class RobotoTextView extends TextView { public RobotoTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public RobotoTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public RobotoTextView(Context context) { super(context); init(); } private void init() { if (!isInEditMode()) { Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf"); setTypeface(tf); } } } 

用法

 <com.test.RobotoTextView android:id="@+id/name" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

在java代码中,你可以把它转换成TextView

 TextView tv=(TextView)findViewById(R.id.custom); Typeface face=Typeface.createFromAsset(getAssets(), "fonts/Verdana.ttf"); tv.setTypeface(face); 

把字体文件放在/ res /

像我的答案,如果有帮助…

您可以按照这里build议的方式扩展TextView,并设置您的字体,然后在整个应用程序中使用它。