41

我有一个自定义视图,可以将文本绘制到Canvas. 我想将其更改为font存储在资产文件夹中的字体。

我正在使用Android Studio,所以我创建了一个文件夹src/main/assets并将我的 ttf 文件放在那里。

Paint txt = new Paint()
Typeface font = Typeface.createFromAsset(getAssets(), "robotobold.ttf");
txt.setTypeface(font);

问题是在我的自定义视图Android Studio中无法识别getAssets(),但是,它在我的 Activity 中识别它。我尝试过从Typeface我的Activity但当我这样做时它不会改变font.

4

7 回答 7

68

您可以使用您ViewgetContext()方法获取当前Context,然后使用它来获取资产

Typeface font = Typeface.createFromAsset(getContext().getAssets(), "robotobold.ttf");
于 2013-08-26T04:43:43.593 回答
34

首先,您必须将assets文件夹保存在您的文件夹中project,而不是保存在src/main.. 中。然后,创建一个名为fontsinside的文件夹assets。然后,将特定的字体字体ttf files放入其中。您可以在编码中使用字体字体,例如:

Typeface type = Typeface.createFromAsset(getAssets(),"fonts/filename.ttf");
textview.setTypeface(type);
于 2013-08-26T05:14:20.150 回答
5

创建了一个文件夹 src/main/assets 并将字体文件放在那里。

在活动中

Typeface font = Typeface.createFromAsset(getAssets(),  "Mukta-Regular.ttf");
tv.setTypeface(font);

在片段中

Typeface.createFromAsset(getActivity().getAssets(), "Mukta-Regular.ttf");
tv.setTypeface(font);
于 2018-01-12T05:28:44.163 回答
1

为了在我的项目中重用字体,我创建了一个充满字体方法的类,这样我就不必每次都创建一个新的字体。

我调用该类FontClass,并且在该类中,我需要使用的每种字体都有一个方法,例如:

public static Typeface getOpenSansRegular(Context c){
    return Typeface.createFromAsset(c.getAssets(), "OpenSans-Light.ttf");
}

然后我可以像这样使用它们:

TextView text = (TextView) findViewById(R.id.textview);
text.setTypeface(FontClass.getOpenSansRegular(getApplicationContext());
于 2016-09-07T09:29:29.220 回答
0

您必须将资产文件夹放在“项目”文件夹中,而不是放在“src”文件夹中。您已将字体放在“src/main/assets/robotobold.ttf”中,这就是它不起作用的原因。您需要像这样“/assets/robotobold.ttf”放置它。

于 2013-08-26T04:50:40.993 回答
0
    Typeface robo = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf");
于 2014-08-28T14:52:57.887 回答
0

我的错误是添加了行

Typeface mFont = Typeface.createFromAsset(this.getAssets(), "abc.ttf");

在 onCreate() 之前

于 2016-09-22T07:52:19.580 回答