使用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