下面是我定位控件问题的分析步骤,希望能够对您有些帮助。
假设分析EditText的背景问题。
1、 查找EditText控件的源码EditText.java,找到其带两个参数的构造函数,一个参数为Context,另一个参数为AttributeSet。一般,控件会在该构造函数中指定默认的Style:
2、 默认的style一般都是由一个reference类型的attr 指定的,类似于C语言里的指针。比如此处EditText默认的Style就是由一个叫“editTextStyle”的attr指定的。而attr的定义一般是在theme中。可以在不同的theme中由同一个attr指向不同的style,这样就实现了,同一个控件,当所在的Activity使用不同的主题时,展现了不同的外观。
3、 根据上一步找到的attr,再去frameworks下theme.xml中去查找该attr的定义。
4、 然后再根据各个Theme里对editTextStyle属性的定义,分别去看各个主题下EditText默认控件style的定义,该定义是在frameworks/res/res/values/styles.xml中定义的。
从上面的定义可以看出我们自己风格的EditText默认风格,在各个主题下只是简单的继承自Widgt.Holo.EditText和Widget.Holo.Light.EditText。然后再去分析这两个父Style的定义就OK。