android 自定义控件字体,解决字体偏移,卡顿,代码重复等问题

其实,安卓上使用自定义的字体非常得简单,在assets文件夹下面,自己定义一个font文件夹,然后,把自己的字体放进去,可以重命名一下,如图:

这样之后,在代码中,设置一下就可以,如下面所示:

Typeface typeface = Typeface.createFromAsset(_instance.getAssets(), "fonts/mi4.ttf");
textView.setTypeface(typeface);

这样,textView显示的文字就是我们自定义的字体了。

但其实这样还有一些问题,我一个一个说:

字体偏移:

刚开始,我们老大给我们找了一个xx.otf格式的字体,苹果上使用没有问题,安卓上,可以把后缀名改一下,改成ttf,也可以使用,但发生的问题就是,字体是整体偏下的,使用原生的字体,可以正常显示,但使用了这个字体,只能显示上半拉,更关键的是,英文和中文 的偏移量还不一样,弄得我调了半天,最后发现,是字体的问题,必须使用原生的ttf字体,使用软件把otf字体转换成ttf也不行,照样会偏。

解决办法 :

使用原生的ttf字体

卡顿,代码 重复:

如你所知,使用上面的代码 ,就可以给textView设置字体,但这样,没法设置全局字体,每一个控件,都要这样设置,我的应用有很多个界面 ,有很多控件,我每个都这样设置,结果,界面非常卡。还会溢出。

而且,这样,也会有大量的代码重复。

这两个问题,我最后的解决办法如下:

首先:自定义applicaion,现在,一般都是这样自定义的application,然后,在程序如下:

public class MyApplication extends Application {
    private Typeface typeface;
    private static MyApplication _instance;

    @Override
    public void onCreate() {
        super.onCreate();
        _instance = (MyApplication) getApplicationContext();
        typeface = Typeface.createFromAsset(_instance.getAssets(), "fonts/mi4.ttf");
    }

    public static  MyApplication getInstace() {
        return _instance;
    }

    public Typeface getTypeface() {
        return typeface;
    }

    public void setTypeface(Typeface typeface) {
        this.typeface = typeface;
    }
}

如下面的代码所示,我直接声明了一个typeFace,它有自己的getter,setter方法,同时,在程序初使化的时候,我就用下面的代码,把typeface初使化了。

然后,使用自定义的View:

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context);
        setTypeface(MyApplication.getInstace().getTypeface());
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTypeface(MyApplication.getInstace().getTypeface());
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setTypeface(MyApplication.getInstace().getTypeface());
    }

}

如图,在自定义的view的构造方法中,直接使用了MyApplication中的typeFace来给view设置字体。

这样,在所有的界面中,我们可以使用我们这个自定义的textView,我们测试并且软件现在已经上线了,完全没有问题。

其它的,如果editText,button等 ,同理。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-20 20:55:34

android 自定义控件字体,解决字体偏移,卡顿,代码重复等问题的相关文章

android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/47720257 问题产生 这算是刚到实习公司接触到的第一个任务.公司某一产品中某个界面的listView高速滑动会有卡顿的现象发生,我的任务就是解决它. 产生原因分析 我一開始的想法比較简单.可能是listview的优化没有做到位,比如convertView的复用.viewHolder的使用等等基础

android问题及其解决-优化listView卡顿和如何禁用ListView的fling

问题解决-优化listView卡顿和如何禁用ListView的fling 前戏很长 问题产生 这算是刚到实习公司接触到的第一个任务.公司某一产品中某个界面的listView快速滑动会有卡顿的现象发生,我的任务就是解决它. 产生原因分析 我一开始的想法比较简单,可能是listview的优化没有做到位,例如convertView的复用.viewHolder的使用等等基础的优化措施,然并卵.好长时间后终于找到了问题发生的相关代码...经过在可疑语句上(onTouchEvent方法中的几个case.on

Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器

Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器

android viewpager fragment切换时界面卡顿解决办法

目前开发的程序在切换View时界面卡顿现象比较严重,影响用户体验,当前项目共就四个View,每个View也只是按钮,所以可以同时加载,不让其它view销毁. 只需在Adapter中重载destroyItem类即可 @Override public void destroyItem(ViewGroup container, int position, Object object) { //重载该方法,防止其它视图被销毁,防止加载视图卡顿 //super.destroyItem(container,

iOS 如何解决UITableView刷新卡顿现象

对之前的项目总结一下: 事情是这样的,我需要在定制Cell完成新闻类app的展示 虽然说SDWebImage提供了一个方法,异步加载图片到UIImageView上 但是,有些时候.需要的图片并不是需要铺满UIImageView 于是就抛弃了,后来想想还是挺二逼的.我可以在下面在铺一层边框UIImageView也能达到这个效果 于是乎,故作高大上,非要自己写. 后来看别人的方法,找到点感觉,还是写出来了,不过还是建立在网络良好的情况下 解决办法 主要要做到一下几个方面: 1.除了UI部分,所有的加

解决LaTeX编译卡顿问题

1.问题: 最近在编译latex时,老是在tulmr.fd处编译很久,但是以前不这样啊,那肯定就是我最近做了什么导致这样的了,是什么呢? 2.解决: 后来google下发现了解决办法,原来是我新安装了字体,所以每次重新编译时,它都要重新生成字体缓存,所以解决办法如下: 1. 清空 C:\texlive\2016\texmf-var\fonts\cache 中的文件 (C:\texlive 是我自己机器上 TeXLive 的安装路径):2. 在命令行运行fc-cache -r -v重新生成字体缓存

Android fragment 切换加载数据卡顿问题

接着上一篇项目的进度,上一篇讲了如何利用fragment来实现下拉菜单,公用菜单,以实现切换主界面数据的功能,这时候遇到的问题是:使用了fragment的切换界面方法,但加载的数据太多,用户从一个界面切换到这个界面的时候,至少有一两秒的卡顿,这是无法忍受的,代码如下: private void initOpenMenuItem(View popupWindow_view) { <span style="white-space:pre"> </span>Drawa

Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决

一个比较长的界面一般都是Scrollview嵌套RecyclerView来解决.不过这样的UI并不是我们开发人员想看到的,实际上嵌套之后.因为Scrollview和RecyclerView都是滑动控件.会有一点滑动上的冲突.导致滑动起来有些卡顿.这个时候.我们重写一下LayoutManager就行了 例如: [java] view plain copy LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getAct

彻底解决 Intellij IDEA 卡顿 优化笔记,重要的快捷键

由于工作中经常出现分支各种切换,使用Eclipse便不再像以前那么舒服了,不停的修改工作空间,每次修改完工作空间又是一堆一堆的个性化设置,来回的切换,真的很累.我们做软件的,怎么能不去尝试新鲜的呢,毕竟,再难走的路,也有人已经走过,我们只需要Google一下而已. 本篇适用于Idea 14.x 15.x 16.x 这次在使用了2天的IDEA之后,我发现这玩意简直屌爆了! 这次我重新进行征服IDEA过程中,遇到了很多很多的问题,当然,有一句话说的很好,遇到一件很难搞的事情,但凡你有半点犹豫,那就肯

Android app优化之导致app 卡顿慢的直接原因

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Android系统很有可能无法及时完成那些复杂的界面渲染操作.Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成()时间超出16ms越多,丢的帧就越多,可以大概估计一下Android 5秒没响应抛