使用lib添加自定义字体android

我正在使用android自定义字体lib书法https://github.com/chrisjenx/Calligraphy 。

但是对textview没有任何影响。 我使用以下代码:

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(new CalligraphyContextWrapper(newBase)); } } 

在XML中:

  

在attrs:

    

在assets / font / gotham-book.ttf中

现在创建扩展Application的类,并在其中包含以下代码。 并在应用程序标记下的清单中声明它。

  CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/Roboto-ThinItalic.ttf") .setFontAttrId(R.attr.fontPath) .build() ); 

TextView删除命名空间。

  

(将app:fontPath更改为fontPath

令人讨厌的是,我们无法解析auto-res命名空间。

创建扩展Application的类。 像这样的东西:

 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/DINNextLTPro-Regular.otf") .setFontAttrId(R.attr.fontPath) .build() ); } } 

接下来我们需要做的是打开我们应用程序的AndroidManifest.xml文件,并在应用程序标记的android:name属性中添加对MyApplication的引用,所以最后清单文件看起来与此类似:

            

此外, https://github.com/chrisjenx/Calligraphy上的说明通过覆盖活动中的方法来注入上下文,如下所示:

 @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } 

资料来源: LINK

为何扩展Application类? 回答

1)下载并复制项目资产文件夹中的字体(yourfont.ttf)文件

2)在您的Activity / Fragment中使用以下代码加载字体

  Typeface yourfont = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf"); 

3)找到TextView(或您要设置此字体的任何其他视图)并使用View的setTypeface方法。 例如。

 TextView textview1 = (TextView) findViewById(R.id.exampletextview); textview1.setTypeface(yourfont); 

这当然有一个缺点,如果你想要应用字体有很多视图,你可以为每个视图手动设置字体。 在这种情况下,您可以通过扩展Textview类来创建自定义视图。 类似下面的代码:

 public class MyTextView extends TextView { public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyTextView(Context context) { super(context); init(); } public void init() { Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/yourfont.ttf"); setTypeface(tf ,1); } 

}

并在xml中将其用作

我使用了TypefaceTextView lib来获得你想要的结果。 请看一下( https://github.com/ragunathjawahar/android-typeface-textview )。

您还可以使用简单的EasyFonts第三方库为TextView设置各种自定义字体。 通过使用此库,您不必担心下载和添加字体到assets / fonts文件夹。 还有关于字体对象的创建。

提供字体面。 您可能想使用哪种方式。

  • 的Roboto
  • Droid Serif
  • 机器人机器人
  • 自由
  • 有趣的提升者
  • Android Nation
  • 绿色鳄梨
  • 承认

只是:

 TextView myTextView = (TextView)findViewById(R.id.myTextView); myTextView.setTypeface(EasyFonts.robotoThin(this)); 

我有同样的问题。

在这里,你需要做两件事。

首先,在xml中,在布局的根目录中添加两行(如下所示)

 xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingPrefix" 

最后,在Activity类中,

 protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } 

Yooooo,它完成了!! 简单

示例请查看http://sofzh.miximages.com/java/F87JE.png