最近有点忙, 现在去想一下,貌似也没学到什么很精辟的东西。可能平时还是需要多总结,多积累把。
说到android的资源,更多的会说到layout view style 之类的。确实有很多书已经讲的很详细了,这些书可以看作是工具书把,就是用的时候翻番就可以了。 我们还是来说说theme把。android的theme,可以细节到你的ActionBar,你的每一种View的字体,颜色,背景。那么,具体是怎么做到的呢?或者说,如果我想自定义了一个theme去修改button点击的样式,那我该怎么做呢?
是时候读读源码了。源代码库中frameworks/base/core/res/res 目录下有如下资源:
里面其实主要是有很多为了适配不同语言或者是不同分辨率的文件夹,所以其实主体还是不大多的。 而咱们的注意点,还是放在values/目录下
其实资源文件与名字无关,并不是colors.xml里面放的,就一定是<color>。 其实,只要你xml 根标签为<resources>即可。简单地去看一下这个目录,theme 相关的有 6 个,其中基础的themes.xml 其他的,都是定制化的theme,如 holo, material等。这些定制化的theme,又有配套的styles color dimen 等。 所以只要看基本theme,再加上一套定制化的theme,应该就差不多了。
接下来是给没(lan)时(de)间(qu)看的人看的。打开基础theme,
一大堆东西,定义到非常详细,包括了正常颜色,以及相反颜色(inverse) ,其实,还有呢 关注在末尾的 textAppearance “链接”到其他的style。其定义在styles.xml种可以看到。在后面再说说styles.xml。 其中有非常熟悉的 @color/xxx, 也有不熟悉的?attr/colorPrimary。这个东西,应该理解为链接。意思就是colorEdgeEffect 的样式跟colorPrimary的样式相同。(这个还有一个很重要的作用,后面会讲)至于为什么问号后面是attr呢?回到图二,你会发现有个attr.xml文件,打开一看:
好眼熟,没错。所有的定义都是在这里的,关键是有注释,所以以后去编写一个控件的xml文件的时候,靠IDE自动帮忙生成的日子一去不复返了。(脱离IDE ing…)在讲styles.xml之前,看一个东西:
关键在@hide,这个表示这些都不能访问到的,但是,如果你是跟着系统一起编的话,还是有办法访问到的。用 *attr/attr_name。 还有这个:
所有控件的样式都在这了,这也说明,如果我想自定义theme,让所有的EditText的字体都是都是宋体? 我只需要修改<item name=”editTextStyle”>@style/mystyle</item> 即可。好,移步到styles.xml中。
先看一下第一组与第二组,其中第二组在第一组的基础上衍生了一个.White,对,B继承于A,而且在A的基础上做出一点变化。继承的方式还有另外一种,就是parent参数,如倒数第一组,就是这种继承方式,毕竟名字不同。由于是java,继承只能继承一个。至于该继承哪个,就涉及到取舍了,一般来说,还是继承原生的,毕竟一般原生继承之上改动较多。 好 回到脱黑的Widget.EditText,这个就是在themes.xml中引用的editTextStyle。 其中有各种参数,是在Widget的基础之上有别于他的。里面也用到了?attr/attr_name,这个就是为了统一一下样式所做出的改变。也就是说,其实,如果你想改变主色调,真的只要修改几个属性,所有的空间都会随之改变。额,还是附上一些代码把。
细心的同学会发现,其实改变editText的color,其实只要在theme中修改editTextColor就可以了(见Widget.EditText),这个种方法,在这个例子里,似乎没有什么太大作用。毕竟层次只有二级,其实 如果我们修改的样式层次太深,那么这个方法的作用就很大了(不信,写一下)这个就是?attr/attr_name的最大作用所在了。