因构造函数踩的坑

68 阅读1分钟

绵绵用力 久久为功

在Android的道路上生命不息,踩坑不止

每一次踩坑都觉得自己只是一只菜鸟,不管自己工作了多长时间,保持对bug的敬畏

分享一下今天踩的坑,坑虽小,花费时间挺长

需求: 想做一个可以改变textSize的自定义textView, 需求很简单

实现原理就是自定义一个ShadowTextView, 继承TextView, 然后添加构造函数,在构造函数中调用方式改变text的大小,一切都是这么自然,一切都是这么丝滑,但是就是不起作用,代码如下:

public class ShadowTextView extends TextView {
    private static float DEFAULT_MAX_TEXT_SIZE = 24;

    private String TAG = "ShadowTextView";
    public ShadowTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        new ShadowTextView(context, attrs, 0);
    }

    public ShadowTextView(Context context) {
        super(context);
    }

    public ShadowTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initialise();
    }
    private void initialise() {
        this.setTextSize(DEFAULT_MAX_TEXT_SIZE);
    }

}

这个时候就开始怀疑自己能力了,找解决办法,看源码,搜资料,是不是调用方式不对啊,是不是应该用画笔Paint啊,是不是。。。快哭了,一天就过去了

原因找到了,不能在public ShadowTextView(Context context, AttributeSet attrs)方法中调用new ShadowTextView(context, attrs, 0);这样不起效果,直接在public ShadowTextView(Context context, AttributeSet attrs)方法中调用initialise()就好了

具体为啥我还不是很清楚,暂时做个记录吧

public class ShadowTextView extends TextView {
    private static float DEFAULT_MAX_TEXT_SIZE = 24;

    private String TAG = "ShadowTextView";
    public ShadowTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialise();
    }

    public ShadowTextView(Context context) {
        super(context);
    }

    public ShadowTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initialise();
    }
    private void initialise() {
        this.setTextSize(DEFAULT_MAX_TEXT_SIZE);
    }

}