前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android上的自定义字体 - 扩展TextView

Android上的自定义字体 - 扩展TextView

作者头像
code_horse
发布2018-07-02 11:20:04
1.1K0
发布2018-07-02 11:20:04
举报
文章被收录于专栏:Android Note
1、将自定义字体应用于所有TextView

应用中我们会经常用到自定义字体的TextView。我们需要每次都去设置TextView的字体。但是,如果您在整个应用程序中多次使用它,那么效率低下(多次分配fontface)和代码(重复相同的代码)是无效的。

2、提供字体内存高效

Android手机内存低的时候已经结束了,但是我们还是应该优化效率。因此,我们应该缓存我们的自定义字体。来自britzl的stackoverflow( britzl on stackoverflow )的解决方案,并调整了一点写法:

代码语言:javascript
复制
public class FontCache {
    private static HashMap<String, Typeface> fontCache = new HashMap<>();
    public static Typeface getTypeface(String fontname, Context context) {
        Typeface typeface = fontCache.get(fontname);
        if (typeface == null) {
            try {
                typeface = Typeface.createFromAsset(context.getAssets(), fontname);
            } catch (Exception e) {
                return null;
            }
            fontCache.put(fontname, typeface);
        }
        return typeface;
    }
}

这将缓存字体,同时最小化对assets文件夹的访问次数。现在,由于我们有一种访问我们的自定义字体的方法,我们来实现一个扩展TextView的类。

3、扩展TextView

接下来,我们将创建一个新的Java类,它扩展了TextView。这允许我们在所有XML视图中使用该类。它继承了常规TextView的所有功能和属性;但添加我们的自定义字体。

代码语言:javascript
复制
public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
        super(context);
        applyCustomFont(context);
    }

    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        applyCustomFont(context);
    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        applyCustomFont(context);
    }

    private void applyCustomFont(Context context) {
        Typeface customFont = FontCache.getTypeface("SourceSansPro-Regular.ttf", context);
        setTypeface(customFont);
    }
}

它从我们的FontCache类获得(希望缓存)字体。最后,我们必须使用字体调用setTypeface()。

4、使用类

只需在XML视图中使用该类,它会自动使用您的自定义字体。没有必要的Java代码!

代码语言:javascript
复制
<RelativeLayout  
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.custom.views.CustomTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/green_dark"
        android:textSize="20sp"
        android:text="Android Studio"
        />

</RelativeLayout>  

您可以看到,您可以继续使用TextView的所有细节(例如textSize,textColor)。现在,只需使用我们刚刚创建的类替换所有<TextView />元素,例如<com.custom.views.CustomTextView />,并且您随时应用自定义字体! 好了,自定义字体的TextView到这里就结束了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.09.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、将自定义字体应用于所有TextView
  • 2、提供字体内存高效
  • 3、扩展TextView
  • 4、使用类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档