自定义EditText的构造器注意点

一般在我们自定义View时,需要提供三个构造器方法(这里的原因是Java基础知识:在子类的构造器中会默认调用父类的无参构造,一旦父类没有提供无参构造,那么子类必须显式调用父类的有参构造)。今天我在继承EditText的时候,出现了一个小问题,特此记录一下,希望其他小伙伴引以为戒,知道的朋友可以趁机嘻嘻我,不要说我不给您们机会。

继承EditText时,也不例外,需要提供三个构造方法:

自定义EditText的构造器注意点_第1张图片

和平常自定义View一样,前面两个构造方法通过this的方式调用第三个构造方法。但是运行起来,发现不对劲,根本无法输入。检查了其它地方,根本不觉得有什么问题,很郁闷。无意中打开了EditText的源码,发现它是这么写的:

自定义EditText的构造器注意点_第2张图片

发现问题了,在两个构造方法的参数中,我们在第三个参数中传入的是0,而EditText的源码传入的是它:

自定义EditText的构造器注意点_第3张图片

显然这个常量不是0。所以只能老老实实的改回来了,通过这种方式去调用,问题得以解决:

自定义EditText的构造器注意点_第4张图片

以后继承系统的TextView等控件时,我再也不会去这样修改了。

你可能感兴趣的:(Android)