如果想将 action bar 的风格设计的合乎我们产品的定位,只需简单地使用 Android 的样式和主题资源。
注意:如果我们为 action bar 使用了 Support 库的 API,那我们必须使用(或重写)Theme.AppCompat家族样式(甚至Theme.Holo家族,在 API level 11 或更高版本中可用)。如此一来,声明的每一个样式属性都必须被声明两次:一次使用系统平台的样式属性(android:属性),另一次使用 Support 库中的样式属性(appcompat.R.attr属性 - 这些属性的上下文其实就是我们的 app)。
使用一个 Android 主题
Android 包含两个基本的 activity 主题,这两个主题决定了 action bar 的颜色:
Theme.Holo,一个 “dark” 的主题
Theme.Holo.Light,一个 “light” 的主题
这些主题即可以被应用到 app 全局,也可以通过在 manifest 文件中设置元素 或元素的android:theme属性,对单一的 activity 进行设置。
自定义背景
重写actionBarStyle属性来实现。actionBarStyle属性指向另一个样式;在该样式里,通过指定一个 drawable 资源来重写background属性。
如果我们的 app 使用了navigation tabs或split action bar,也可以通过分别设置backgroundStacked和backgroundSplit属性来为这些条指定背景。(Note:为自定义主题和样式声明一个合适的父主题,这点很重要。如果没有父样式,action bar将会失去很多默认的样式属性,除非我们自己显式的对他们进行声明。)
仅支持 Android 3.0 和更高
当仅支持 Android 3.0 和更高版本时,可以通过如下方式定义 action bar 的背景:res/values/themes.xml
支持 Android 2.1 和更高
当使用 Support 库时,上面同样的主题必须被替代成如下:res/values/themes.xml
自定义文本颜色
修改 action bar 中的文本颜色,需要分别设置每个元素的属性:
Action bar 的标题:创建一种自定义样式,并指定textColor属性;同时,在自定义的actionBarStyle中为titleTextStyle属性指定为刚才的自定义样式。(注意:被应用到titleTextStyle的自定义样式应该使用TextAppearance.Holo.Widget.ActionBar.Title作为父样式。)
仅支持 Android 3.0 和更高
当仅支持 Android 3.0 和更高时,样式 XML 文件应该是这样的:
res/values/themes.xml
自定义 Tab Indicator
为 activity 创建一个自定义主题,通过重写actionBarTabStyle属性来改变navigation tabs使用的指示器。actionBarTabStyle属性指向另一个样式资源;在该样式资源里,通过指定一个state-list drawable 来重写background属性。
注意:一个state-list drawable 是重要的,它可以通过不同的背景来指出当前选择的 tab 与其他 tab 的区别。更多关于如何创建一个 drawable 资源来处理多个按钮状态,请阅读State List文档。
例如,这是一个状态列表 drawable,为一个 action bar tab 的多种不同状态分别指定背景图片:
res/drawable/actionbar_tab_indicator.xml
仅支持 Android 3.0 和更高
当仅支持 Android 3.0 和更高时,样式 XML 文件应该是这样的:
res/values/themes.xml
源地址:http://wiki.jikexueyuan.com/project/android-training-geek/styling.html