很多时候,系统的主题并不适用,app想要自己喜欢的主题,这个时候需要自定义一个主题。
这里就简单讲述一下自定义主题的步骤。(以DarkActionBar修改title大小为例)
主题相关的文件:
AndroidManifest.xml和styles.xml文件
在AndroidManifest中需要引用自定义的主题给app使用:
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/MyTheme" >
最后一样引用自定义的主题:MyTheme。
这个MyTheme,定义在styles.xml中。
这个sytyles.xml在目录:res/values/下面。
认识一个东西,一定是先直观看上去,有了第一直观认知;再次进行详细的分析就能认识一个事物。
所以这里先看一下我们的demo中的styles.xml。(自定义:修改DarkActionBar的title字体大小)
命名并没有太规范,重点在于如何自定义主题。关注方法步骤即可。
说一下语法框架:其中里面的
下面看是讲述如何自定义:两步即可:觅祖寻根
自定义一个主题,定然不是全部自己写,现有android主题丰富,定然有个主题可以parent,只需要重新定义其中的部分属性而已。
举一反三,这里就之讲解title修改,其他的修改是一样的。
这里我们就想用DarkActionBar中的大多数现有效果,所以选定parent为@android:style/Theme.Holo.Light.DarkActionBar
通过1找到了可以拿来继承的parent,绝大多数的属性都可以直接用了。少部分属性需要修改,这里我们就要抽丝剥茧,层层查找了,找到根属性来进行修改。
上面这句话可能比较难理解,拿上面的例子看一下,例子就是层层递进,到根style才可以。
目标是修改ActionBar的title,先继承DarkActionBar之后,还需要定义style Inverse--sytle TextAppreance然后在Item里写。
抛出两个问题:a.如何确定递进层?b.这个层层递进的终点到哪里
这两个问题解决了,方法也就掌握了。
首先明确是Holo.Light.DarkActionBar,其次明确修改actionbar的title大小。
这一步还是有难度的,层层递进的路径不是太好确定,DarkActionBar下面有很多属性,哪一个会包含这个title大小,只能点开去看了。(开发环境使用的AS,Eclipse一样)
直接ctrl+鼠标左建,进入定义:(只截取了部分)
好了,找到了,这里就是textSize的大小了。
其实这个步骤就夹杂在a步骤中,层层寻找,找到了具体的属性值定义的地方,也就到根了。
根和层的不同就在这里:
层还是@style,根则是具体的dimen、drawable等了。
到这里基本就搞定了。
写的时候,顺着来,一层一层写,最后把textSize的值改了就可以了。
从原声定义:层次到根
actionBarStyle---Widget.Holo.Light.ActionBar.Solid.Inverse---TextAppearance.Holo.Widget.ActionBar.Title.Inverse---textSize
由actionBarStyle---Widget.Holo.Light.ActionBar.Solid.Inverse,所以我们自定义的style Inverse需要继承:android:Widget.Holo.Light.ActionBar.Solid.Inverse,然后复写里面的titleTextStyle。以此类推。
这里为了突出效果,将title大小改为100px。
当然,这里只是修改title,其他的额像背景色等,类似修改,就可以订制出需要的主题了。