天天看点

Android官方开发文档Training系列课程中文版:添加ActionBar之自定义ActionBar样式

Android已经包含了一少部分的内置Activity主题,这些主题包含了”dark”或者”light”的ActionBar风格。你也可以通过继承这些主题来进一步的自定义自己ActionBar。

Android内置了两种最基本的Activity主题,它们区别在于ActionBar的颜色:

Theme.Holo 是”dark”主题。

Theme.Holo.Light 是”light”主题。

你可以将这些主题应用到整个APP中或者是单个Activity中,通过在清单文件的< application>元素或是< activity>元素内部使用android:theme属性来指定:

你也可以通过使用Theme.Holo.Light.DarkActionBar主题来达到ActionBar是”dark”样式而Activity的其余部分则是”light”样式的效果。

如果是使用了支持库的话,必须使用Theme.AppCompat下的主题:

Theme.AppCompat 对应的是”dark”主题.

Theme.AppCompat.Light 对应的是”light”主题.

Theme.AppCompat.Light.DarkActionBar 对应的是带着黑色ActionBar的亮色主题.

为了改变ActionBar的背景色,需要创建一个自定义的主题,然后重写actionBarStyle属性。这个属性指向了其它的背景样式,您可以在其它背景样式中重写background属性来给ActionBar指定一个图像资源。

如果APP使用了navigation tabs或者 split action bar,你也可以分别通过backgroundStacked和backgroundSplit属性指定他们的背景色。

注意: 选择适合的父类主题对于自定义主题来说很重要,当继承主题之后,所有的样式都会被继承下来。如果没有父类主题,除非很明确的声明了每一项样式,否则ActionBar会丢失很多样式属性。

当仅仅支持了Android 3.0及更高的版本,你可以像这样定义ActionBar的背景:

然后应用这个主题到整个APP中或者是单个Activity中:

当使用了支持库,它的修改方式和上面很相似:

为了改变ActionBar上的字体颜色,你需要单独重写text元素的每一个属性:

ActionBar标题:创建自定义的样式,然后指定textColor的值,然后将这个样式应用到你自己定义的主题actionBarStyle中的titleTextStyle属性里。

注意:如果要使用应用到titleTextStyle中的自定义样式,那么应该使这个样式继承TextAppearance.Holo.Widget.ActionBar.Title。

ActionBar的标签:重写主题中的actionBarTabTextStyle。

ActionBar中的按钮:重写主题中的actionMenuTextColor。

当仅仅支持了Android 3.0及更高的版本,你的XML风格文件应该使这样的:

当使用了支持库,你的XML风格文件应该使这样的:

如果要改变导航标签navigation tabs的指示器的话,创建一个activity主题,然后重写actionBarTabStyle属性。这个属性会指向其它样式资源。这个样式资源需要重写background属性,然后并设置它的值为一个状态列表图像资源。

举个例子,以下是一个状态列表图像资源文件的内容。这里声明了用作于ActionBar标签的若干个状态,每个状态都指定了一张背景图:

更多资源

继续阅读