Using custom font in android TextView using xml

前端 未结 10 1084
执念已碎
执念已碎 2020-11-29 17:02

I have added a custom font file to my assets/fonts folder. How do I use it from my XML?

I can use it from code as follows:

TextView text =          


        
10条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-29 17:59

    UPDATE: https://github.com/chrisjenx/Calligraphy appears to be a superior solution to this.


    Maybe you can use reflection to inject/hack your font into the static list of available fonts when your application is created? I am interested in feedback from others if this is a really, really bad idea or if this is a great solution — it seems it is going to be one of those extremes...

    I was able to inject my custom typeface into the list of system typefaces with my own font family name, then specifying that custom font family name ("brush-script") as the value of android:FontFamily on a standard TextView worked on my LG G4 running Android 6.0.

    public class MyApplication extends android.app.Application
    {
        @Override
        public void onCreate()
        {
            super.onCreate();
    
            Typeface font = Typeface.createFromAsset(this.getResources().getAssets(),"fonts/brush-script.ttf");
            injectTypeface("brush-script", font);
        }
    
        private boolean injectTypeface(String fontFamily, Typeface typeface)
        {
            try
            {
                Field field = Typeface.class.getDeclaredField("sSystemFontMap");
                field.setAccessible(true);
                Object fieldValue = field.get(null);
                Map map = (Map) fieldValue;
                map.put(fontFamily, typeface);
                return true;
            }
            catch (Exception e)
            {
                Log.e("Font-Injection", "Failed to inject typeface.", e);
            }
            return false;
        }
    }
    

    In my layout

    
    

提交回复
热议问题