绵绵用力 久久为功
在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);
}
}