Android字体createFromAsset

我有一个自定义视图,将文本绘制到canvas上。 我想将Font更改为assets文件夹中存储的字体。

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

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

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

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

 Typeface font = Typeface.createFromAsset(getContext().getAssets(), "robotobold.ttf"); 

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

 Typeface type = Typeface.createFromAsset(getAssets(),"fonts/filename.ttf"); textview.setTypeface(type); 

创建了一个文件夹src / main / assets并在其中放置了字体文件。

在活动中

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

在片段中

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

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

我调用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()); 

您必须将您的资源文件夹放在“Project”文件夹中,不是“src”文件夹中 。 您已将字体放在“src / main / assets / robotobold.ttf”中 ,这就是它无法正常工作的原因。 您需要将其放置为“/assets/robotobold.ttf”。

  Typeface robo = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); 

我的错误是添加了这条线

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

在onCreate()之前