有时候我们的Android程序需要个性化一点,常用的默认字体就不能满足我们的要求了,那么如何使用自定义的字体呢?下面是一种自定义字体在Android中的应用,分享给大家学习。
第一步,在assets目录下新建fonts目录,把ttf字体文件放到fonts文件夹下面。
第二步,程序中调用:
AssetManager mgr=getAssets(); Typeface tf=Typeface.createFromAsset(mgr, "fonts/bmzy.ttf"); tv=findViewById(R.id.textview); tv.setTypeface(tf);
原生字体效果:
自定义字体效果:
设置全局自定义字体
首先在style.xml中定义一个主题样式。
<style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowNoTitle">true</item> <item name="android:typeface">monospace</item> <item name="android:windowBackground">@android:color/transparent</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style>
然后在AndroidManifest.xml中 application中使用这个主题、
<application android:name="com.bd.application.TestApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
然后还需要自定义TestApplication继承Application
在TestApplication的oncreate()方法中通过反射修改APP默认字体
代码如下
public class TestApplication extends Application { private static TestApplication mSelf; String fontPath = "fonts/bmzy.ttf"; @Override public void onCreate() { super.onCreate(); mSelf = this; replaceSystemDefaultFont(this, fontPath); } public static TestApplication getInstance() { return mSelf; } public void replaceSystemDefaultFont(Context context, String fontPath) { /* 因为我们在主题里给app设置的默认字体就是monospace所以這里我们修改的是MoNOSPACE,设置其他的也可以,但是需要注意的是必须保持设置和修改的一致。(Android中默认的字体样式有serif monospace 等)*/ replaceTypefaceField("MONOSPACE", createTypeface(context, fontPath)); } // 通过字体资源地址创建自定义字体 private Typeface createTypeface(Context context, String fontPath) { return Typeface.createFromAsset(context.getAssets(), fontPath); } // 修改MONOSPACE字体为自定义的字体达到修改app默认字体的目的 private void replaceTypefaceField(String fieldName, Object value) { try { Field field = Typeface.class.getDeclaredField(fieldName); field.setAccessible(true); field.set(null, value); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/242163.html