我正在为我的android应用程序寻找一些时尚的字体。但问题是我如何使我的android应用程序可支持外部字体。
谢谢。
Answers:
您需要在项目中的Assets文件夹下创建fonts文件夹,然后将TTF放入其中。然后在您的活动中onCreate()
TextView myTextView=(TextView)findViewById(R.id.textBox);
Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/mytruetypefont.ttf");
myTextView.setTypeface(typeFace);
请注意,并非所有的TTF都可以使用。在我进行实验时,它仅适用于一个子集(在Windows上,其名称用大写字母表示)。
您可以使用带有自定义字体的整个应用程序使用自定义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*/);
}
}
}
要实现您需要使用Typeface进行以下示例
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);
}
}
}
allViews
您必须使用循环遍历布局,getChildCount()
所以您可以将foreach替换为简单的for循环。
完成此操作的最简单方法是将所需字体与您的应用程序打包在一起。为此,只需在项目根目录中创建一个asset /文件夹,然后将字体(采用TrueType或TTF格式)放入这些资产中。例如,您可以创建资产/字体/并将TTF文件放在其中。
然后,您需要告诉小部件使用该字体。不幸的是,您不能再为此使用布局XML,因为XML不知道您可能已将其藏为应用程序资产。相反,您需要通过调用Typeface.createFromAsset(getAssets(),“ fonts / HandmadeTypewriter.ttf”)进行Java代码更改,然后获取创建的Typeface对象并将其通过setTypeface()传递给TextView。
要获得更多参考,请参见我获得的教程:
除了上述答案外,还有一点。当在片段内使用字体时,字体实例化应在onAttach方法(override)中完成,如下所示:
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf");
}
原因:
在短时间内将片段附加到活动上。如果在将片段附加到活动之前调用CreateFromAsset方法,则会发生错误。