2011-04-12 91 views

回答

145

您需要在项目的assets文件夹下创建字体文件夹,并将TTF放入其中。然后在您的活动onCreate()

TextView myTextView=(TextView)findViewById(R.id.textBox); 
Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/mytruetypefont.ttf"); 
myTextView.setTypeface(typeFace); 

请注意,并非所有的TTF都能正常工作。在我进行实验的时候,它只适用于一个子集(在Windows上是名字用小写字母写的)。

+0

谢谢zelimir我明白了。 – bHaRaTh 2011-04-12 11:26:11

+0

不客气。 – Zelimir 2011-04-12 11:27:50

+6

这个资产文件夹在哪里?我使用Android的工作室,我可以在src/ – intoTHEwild 2013-08-17 20:01:06

9

在资产文件夹中创建一个名为fonts的文件夹,并从下面的链接添加片段。

Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf"); 
textview.setTypeface(tf); 
+0

谢谢Janardhan谢谢,我明白了。 – bHaRaTh 2011-04-12 11:25:55

5

完成此操作最简单的方法是将所需的字体 与您的应用程序打包在一起。为此,只需在 项目的根目录下创建一个资产/文件夹,然后将您的字体(以TrueType或TTF格式)放入 的资产中。例如,您可能会创建资产/字体/并将您的TTF文件放在那里。

然后,您需要告诉您的小部件使用该字体。不幸的是, 您不能再使用布局XML,因为XML并不知道 关于您可能隐藏作为应用程序资产的任何字体。 取而代之,您需要通过调用 Typeface.createFromAsset(getAssets(),“fonts/HandmadeTypewriter.ttf”), 然后采用创建的Typeface对象并通过setTypeface将其传递到您的 TextView来更改Java代码)。

对于这里更多的参考是在那里我得到这个教程:

http://www.androidguys.com/2008/08/18/fun-with-fonts/

7

要实现你需要使用字样与样品经过下面的

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Roboto/Roboto-Regular.ttf"); 
for (View view : allViews) 
{ 
    if (view instanceof TextView) 
    { 
     TextView textView = (TextView) view; 
     textView.setTypeface(typeface); 
     } 
    } 
} 
+1

为'allViews'您使用通过布局必须循环'getChildCount()' 所以你可以只用一个简单的for循环更换的foreach。 – ConquerorsHaki 2016-03-09 12:47:51

11

您可以使用自定义TextView整个应用程序与自定义字体在这里是一个例子

public class MyTextView extends TextView { 

    Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR); 
    Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_BOLD); 

    public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public MyTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyTextView(Context context) { 
     super(context); 
    } 

    public void setTypeface(Typeface tf, int style) { 
     if (style == Typeface.BOLD) { 
      super.setTypeface(boldTypeface/*, -1*/); 
     } else { 
      super.setTypeface(normalTypeface/*, -1*/); 
     } 
    } 
} 
2

我推荐这个approach它将typeface中的自定义字体的名称添加到styles.xml并将您的字体集合放入assets文件夹中,这非常好。

+0

非常好的方法,我建议把它引起注意。如果将来无法访问链接,则可能是复制主代码并在此处发布的好主意。 – validcat 2016-08-25 15:05:13

1

除了上述答案之外,还有一点。 当使用片段内的字体,字体实例应该在onAttach方法(覆盖)进行,如下所示:片段是前
有很短的时间跨度:

@Override 
public void onAttach(Activity activity){ 
    super.onAttach(activity); 
    Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf"); 
} 

原因附加到一项活动。如果在将片段附加到活动之前调用CreateFromAsset方法,则会发生错误。

相关问题