Android的装饰风格有多种,这些风格的不同之处主要体现在标题栏区域。比如最普通的标题栏仅有图标和标题。还有一些其他的风格,如带进度条的标题栏等。
在Android4.0上,有了新的标题栏,名为ActionBar,它提供了能强大的功能,如支持TAB页,支持菜单等。下面将分析主要的ActionBar样式。
一, ActionBar样式定义
Theme主题对ActionBar样式的定义如下:
- <!-- Action bar styles -->
- <item name="actionDropDownStyle">@android:style/Widget.Spinner.DropDown</item>
- <item name="actionButtonStyle">@android:style/Widget.ActionButton</item>
- <item name="actionOverflowButtonStyle">@android:style/Widget.ActionButton.Overflow</item>
- <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@null</item>
- <item name="actionModeCloseDrawable">@android:drawable/ic_menu_close_clear_cancel</item>
- <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item>
- <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item>
- <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item>
- <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item>
- <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item>
- <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item>
- <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search</item>
- <item name="actionBarTabStyle">@style/Widget.ActionBar.TabView</item>
- <item name="actionBarTabBarStyle">@style/Widget.ActionBar.TabBar</item>
- <item name="actionBarTabTextStyle">@style/Widget.ActionBar.TabText</item>
- <item name="actionModeStyle">@style/Widget.ActionMode</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.ActionButton.CloseMode</item>
- <item name="actionBarStyle">@android:style/Widget.ActionBar</item>
- <item name="actionBarSplitStyle">?android:attr/actionBarStyle</item>
- <item name="actionBarSize">@dimen/action_bar_default_height</item>
- <item name="actionModePopupWindowStyle">?android:attr/popupWindowStyle</item>
- <item name="actionMenuTextAppearance">@android:style/TextAppearance.Holo.Widget.ActionBar.Menu</item>
- <item name="actionMenuTextColor">?android:attr/textColorPrimary</item>
- <item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarDivider">?android:attr/dividerVertical</item>
- <item name="actionBarItemBackground">?android:attr/selectableItemBackground</item>
- <item name="dividerVertical">@drawable/divider_vertical_dark</item>
- <item name="dividerHorizontal">@drawable/divider_vertical_dark</item>
- <item name="buttonBarStyle">@android:style/ButtonBar</item>
- <item name="buttonBarButtonStyle">?android:attr/buttonStyle</item>
- <item name="segmentedButtonStyle">@android:style/SegmentedButton</item>
这里定义了所有与ActionBar相关的属性,下面是Holo主题对ActionBar样式的定义,该样式对Theme定义的大部分ActionBar样式进行了重写,如下:
- <!-- Action bar styles -->
- <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item>
- <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item>
- <item name="actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item>
- <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_dark</item>
- <item name="actionModeCloseDrawable">@android:drawable/ic_cab_done_holo_dark</item>
- <item name="actionBarTabStyle">@style/Widget.Holo.ActionBar.TabView</item>
- <item name="actionBarTabBarStyle">@style/Widget.Holo.ActionBar.TabBar</item>
- <item name="actionBarTabTextStyle">@style/Widget.Holo.ActionBar.TabText</item>
- <item name="actionModeStyle">@style/Widget.Holo.ActionMode</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.Holo.ActionButton.CloseMode</item>
- <item name="actionBarStyle">@android:style/Widget.Holo.ActionBar</item>
- <item name="actionBarSize">@dimen/action_bar_default_height</item>
- <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.PopupWindow.ActionMode</item>
- <item name="actionBarWidgetTheme">@null</item>
- <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item>
- <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item>
- <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item>
- <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item>
- <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item>
- <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item>
- <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_dark</item>
- <item name="dividerVertical">?android:attr/listDivider</item>
- <item name="dividerHorizontal">?android:attr/listDivider</item>
- <item name="buttonBarStyle">@android:style/Holo.ButtonBar</item>
- <item name="buttonBarButtonStyle">?android:attr/borderlessButtonStyle</item>
- <item name="segmentedButtonStyle">@android:style/Holo.SegmentedButton</item>
这是系统HOLO主题对ActionBar样式的定义。从中可以看到有一些重要的样式属性定义,如actionBarStye、actionButtonStyle、actionModeStyle等。
二, 样式属性actionBarStyle
样式属性actionBarStyle定义了ActionBar的基本样式。
- <style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView">
- <item name="android:background">@drawable/tab_indicator_holo</item>
- <item name="android:paddingLeft">16dip</item>
- <item name="android:paddingRight">16dip</item>
- </style>
其父样式如下:
- <style name="Widget.ActionBar">
- <item name="android:background">@android:drawable/action_bar_background</item>
- <item name="android:displayOptions">useLogo|showHome|showTitle</item>
- <item name="android:divider">@android:drawable/action_bar_divider</item>
- <item name="android:height">?android:attr/actionBarSize</item>
- <item name="android:paddingLeft">0dip</item>
- <item name="android:paddingTop">0dip</item>
- <item name="android:paddingRight">0dip</item>
- <item name="android:paddingBottom">0dip</item>
- <item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Title</item>
- <item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Subtitle</item>
- <item name="android:progressBarStyle">@android:style/Widget.ProgressBar.Horizontal</item>
- <item name="android:indeterminateProgressStyle">@android:style/Widget.ProgressBar.Small</item>
- <item name="android:homeLayout">@android:layout/action_bar_home</item>
- </style>
其中,background定义了ActionBar的背景;
displayOptions定义了显示选项,这里声明了使用LOGO、显示Home以及Title。
homeLayout定义了ActionBar左边Home的布局,包括向左返回上一层那个箭头。
三, 样式属性actionButtonStyle
样式属性actionButtonStyle 定义了ActionBar上按钮的样式,比如ActionBar上的菜单按钮等。actionButtonStyle所引用的样式定义如下:
- <style name="Widget.Holo.ActionButton" parent="Widget.ActionButton">
- <item name="android:minWidth">56dip</item>
- <item name="android:gravity">center</item>
- <item name="android:paddingLeft">12dip</item>
- <item name="android:paddingRight">12dip</item>
- <item name="android:scaleType">center</item>
- </style>
从上面的定义看出,它定义了Button的最小宽度、居中样式、左右padding以及图片的放缩方式。再看看该样式的父样式,如下:
- <style name="Widget.ActionButton">
- <item name="android:background">?android:attr/actionBarItemBackground</item>
- <item name="android:paddingLeft">12dip</item>
- <item name="android:paddingRight">12dip</item>
- <item name="android:minWidth">56dip</item>
- <item name="android:minHeight">?android:attr/actionBarSize</item>
- </style>
从这里看出,子样式重写了父样式中的一些属性,但保留了背景和最小高度。这个背景background属性经过两次引用,引用了HOLO的如下属性:
- <item name="selectableItemBackground">@android:drawable/item_background_holo_dark</item>
很明显的就能看出,该背景引用的是一个selector类型的drawable。下面是这个drawable的定义:
- <selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
- <item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
- <item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_dark" />
- <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" />
- <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" />
- <item android:state_focused="true" android:drawable="@drawable/list_focused_holo" />
- <item android:drawable="@color/transparent" />
- </selector>
这里就能看出各个状态下引用的是哪些背景图片了。
四, 样式属性actionBarDivider
样式属性actionBarDivider定义了ActionBar操作项之间的分隔条。可以看出,它直接引用了另一个ActionBar相关属性dividerVertical,其定义如下:
- <item name="dividerVertical">@drawable/divider_vertical_dark</item>
通过分析,这里引用的drawable直接对应一张图片,而不是selector类型。
五, 样式属性actionMenuTextAppearance 和 actionMenuTextColor
样式属性actionMenuTextAppearance 和actionMenuTextColor定义了菜单的文本样式与颜色。
- <style name="TextAppearance.Holo.Widget.ActionBar.Menu"
- parent="TextAppearance.Holo.Small">
- <item name="android:textSize">12sp</item>
- <item name="android:textStyle">bold</item>
- <item name="android:textColor">?android:attr/actionMenuTextColor</item>
- <item name="android:textAllCaps">true</item>
- </style>
六, 样式属性actionBarWidgetThem
样式属性actionBarWidgetTheme 为被添加到ActionBar的操作栏中的Widget定义主题资源。
七, 样式属性actionBarStyle
样式属性actionBarStyle定义了ActionBar的基本样式。
- <style name="Widget.Holo.ActionBar" parent="Widget.ActionBar">
- <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title</item>
- <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item>
- <item name="android:background">@android:drawable/ab_transparent_dark_holo</item>
- <item name="android:backgroundStacked">@android:drawable/ab_stacked_transparent_dark_holo</item>
- <item name="android:backgroundSplit">@android:drawable/ab_bottom_transparent_dark_holo</item>
- <item name="android:divider">?android:attr/dividerVertical</item>
- <item name="android:progressBarStyle">@android:style/Widget.Holo.ProgressBar.Horizontal</item>
- <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.ProgressBar</item>
- <item name="android:progressBarPadding">32dip</item>
- <item name="android:itemPadding">8dip</item>
- </style>
其父样式如下:
- <style name="Widget.ActionBar">
- <item name="android:background">@android:drawable/action_bar_background</item>
- <item name="android:displayOptions">useLogo|showHome|showTitle</item>
- <item name="android:divider">@android:drawable/action_bar_divider</item>
- <item name="android:height">?android:attr/actionBarSize</item>
- <item name="android:paddingLeft">0dip</item>
- <item name="android:paddingTop">0dip</item>
- <item name="android:paddingRight">0dip</item>
- <item name="android:paddingBottom">0dip</item>
- <item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Title</item>
- <item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Subtitle</item>
- <item name="android:progressBarStyle">@android:style/Widget.ProgressBar.Horizontal</item>
- <item name="android:indeterminateProgressStyle">@android:style/Widget.ProgressBar.Small</item>
- <item name="android:homeLayout">@android:layout/action_bar_home</item>
- </style>
八, 样式属性actionBarTabStyle
样式属性 actionBarTabStyle 为Tab页的标签定义样式,其引用样式如下:
- <style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView">
- <item name="android:background">@drawable/tab_indicator_holo</item>
- <item name="android:paddingLeft">16dip</item>
- <item name="android:paddingRight">16dip</item>
- </style>
其background属性定义了tab标签的背景,其也是selector类型的drawable。下面是该drawable的具体定义:
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Non focused states -->
- <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" />
- <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />
- <!-- Focused states -->
- <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" />
- <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />
- <!-- Pressed -->
- <!-- Non focused states -->
- <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
- <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
- <!-- Focused states -->
- <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
- <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
- </selector>
九, 样式属性actionBarTabBarStyle
样式属性actionBarTabBarStyle 定义了Tab标签之间分隔条。
- <style name="Widget.Holo.ActionBar.TabBar" parent="Widget.ActionBar.TabBar">
- <item name="android:divider">?android:attr/actionBarDivider</item>
- <item name="android:showDividers">middle</item>
- <item name="android:dividerPadding">12dip</item>
- </style>
可以看出,divider引用的资源与前面菜单分隔条引用的资源是相同的。
十, 样式属性actionBarTabTextStyle
样式属性 actionBarTabTextStyle 定义了Tab的文本样式,如下:
- <style name="Widget.Holo.ActionBar.TabText" parent="Widget.ActionBar.TabText">
- <item name="android:textAppearance">@style/TextAppearance.Holo.Medium</item>
- <item name="android:textColor">?android:attr/textColorPrimary</item>
- <item name="android:textSize">12sp</item>
- <item name="android:textStyle">bold</item>
- <item name="android:textAllCaps">true</item>
- <item name="android:ellipsize">marquee</item>
- <item name="android:maxLines">2</item>
- </style>
十一, 样式属性actionDropDownStyle
样式属性 actionDropDownStyle 定义了下拉导航列表的样式,如下:
- <style name="Widget.Holo.Spinner.DropDown.ActionBar">
- <item name="android:background">@android:drawable/spinner_ab_holo_dark</item>
- </style>
其祖先样式:
- <style name="Widget.Holo.Spinner" parent="Widget.Spinner.DropDown">
- <item name="android:background">@android:drawable/spinner_background_holo_dark</item>
- <item name="android:dropDownSelector">@android:drawable/list_selector_holo_dark</item>
- <item name="android:popupBackground">@android:drawable/menu_dropdown_panel_holo_dark</item>
- <item name="android:dropDownVerticalOffset">0dip</item>
- <item name="android:dropDownHorizontalOffset">0dip</item>
- <item name="android:dropDownWidth">wrap_content</item>
- <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>
- <item name="android:gravity">left|center_vertical</item>
- </style>
十二, 其他
在与ActionBar相关的样式中还定义了ActionMode的样式,但ActionMode与ActionBar是属于两个不同类型的控件,这里就不对ActionMode进行介绍了。
通过上面对ActionBar样式的分析,我们就可能很容易在项目中根据实际需求对ActionBar的样式进行修改,特别是在主题切换功能中,要求对ActinBar的样式有比较全面深入的了解。除了ActionBar的样式之外,了解Android系统时何时创建ActionBar、以及根据不同feature创建不同的ActionBar也是非常重要的。
相关推荐
5. **自定义视图**:如果默认的ActionBar样式不能满足需求,开发者还可以通过`setCustomView()`方法添加自定义的视图来扩展功能。 郭霖的博客中可能详细讲解了如何在实际项目中应用这些方法,包括如何实现滑动抽屉...
2. 自定义样式:在`res/values/styles.xml`中定义新的主题,覆盖默认的ActionBar样式,例如改变背景颜色、文字颜色等。 三、添加操作按钮(Action Items) 1. menu资源:在`res/menu`目录下创建XML文件,定义...
本文将深入探讨Android ActionBar的学习要点,并通过源代码解析来加深理解。 首先,我们来了解一下ActionBar的基本概念。它是Android 3.0(API Level 11)引入的一个特性,用于提供一个统一的、可定制的顶部导航...
**Android ActionBar 深度解析** 在Android应用开发中,ActionBar是一个重要的组件,它位于应用程序界面的顶部,提供了用户与应用交互的关键入口点。这个"ActionBar(包含lib项目和测试项目)"是针对Android ...
`menu`目录下的XML文件会定义ActionBar上的菜单项,而`res/values/styles.xml`则可能包含了自定义的主题,以改变ActionBar的颜色和样式。此外,`build.gradle`文件会声明对Android Support Library或AndroidX库的...
- 自定义样式:如何通过改变主题或者使用`setHomeAsUpIndicator()`等方法改变ActionBar的外观。 - 使用ActionBar Sherlock库:对于兼容低版本Android,可能使用了ActionBar Sherlock库,这是一个第三方库,使得在...
1. **样式和颜色**:可以通过修改主题(Theme)或在布局文件中设置颜色属性来改变ActionBar的背景色、文字颜色等。 2. **图标和文字**:可以添加自定义的Logo、Title或者Subtitle,甚至可以完全移除默认的图标和文字...
- 使用`<item name="android:actionBarStyle">@style/MyCustom.ActionBar</item>`来指定自定义的ActionBar样式。 10. **AppCompat库的支持** - 对于Android 2.1(API级别7)及以下版本,可以使用AppCompat库来...
本篇文章将详细讲解ActionBar的基本概念、功能、使用方法以及源码解析。 首先,ActionBar是Android SDK中的一个核心组件,自Android 3.0(API Level 11)引入,用于提供应用程序的导航和操作。它为用户提供了一种...
《ActionBar-PullToRefresh框架深度解析》 在Android应用开发中,为了提供用户更好的交互体验,下拉刷新(PullToRefresh)功能已经成为许多列表视图的标准配置。ActionBar-PullToRefresh是一个开源库,专为Android...
本篇文章将深入探讨如何自定义ActionBar的样式,并通过参考源码`ABLayout`来解析实现过程。 首先,自定义ActionBar风格主要涉及到以下几个步骤: 1. **定义主题**:在`res/values/styles.xml`文件中,创建一个新的...
1. **设置样式**:可以通过修改主题(Theme)来改变`ActionBar`的颜色、背景等属性。在`res/values/styles.xml`文件中定义一个新的主题,并在`AndroidManifest.xml`中应用到对应的Activity。 2. **添加图标和标题**...
本篇文章将深入探讨如何在Android中自定义ActionBar,并通过实例详细解析其实现过程。 首先,从Android 3.0(API Level 11)开始,官方提供了ActionBar的API。不过,为了支持更低版本的Android系统,开发者通常会...
本文将深入探讨“android-actionbar”这一主题,解析其核心概念、使用方法以及相关的优化策略。 首先,我们需要理解ActionBar的基本功能。它是Android 3.0(Honeycomb)版本引入的一个特性,旨在提升平板电脑应用的...
1. 在AndroidManifest.xml中为你的Activity指定主题,使用一个包含`ActionBar`的样式。 2. 在Activity的布局文件中,使用`<androidx.appcompat.widget.Toolbar>`替代原生的`<android.widget.ActionBar>`,因为`...
本篇文章将深入探讨“android actionbar 新增功能”,并结合提供的“ActionBarTest”代码示例,解析如何在项目中实现这些功能。 1. **Action Bar的自定义样式** Android允许开发者通过自定义主题和样式文件来调整...
本篇文章将详细解析如何在Android中使用ActionBar Tabs,并通过实例来展示如何在Tab之间切换Fragment。 首先,让我们了解ActionBar的基本用法。在Android 3.0(API级别11)及更高版本中,ActionBar被引入以提供更...
- **主题定制**:通过修改应用程序的主题,可以改变`ActionBar`的颜色、字体等视觉样式。 - **自定义视图**:可以添加自定义视图来扩展`ActionBar`的功能,实现更个性化的布局。 3. **`ActionBar`与`Toolbar`的...
《玻璃风格的ActionBar实践解析》 在Android应用开发中,ActionBar作为一个重要的组件,承载着展示应用标识、导航和操作的功能。然而,随着设计趋势的变化,开发者们常常希望为ActionBar添加更具特色的视觉效果,...
1. **主题和样式**:`ActionBarSherlock`通过自定义主题和样式,使得在Android 2.x版本中也能展示类似`ActionBar`的效果。它使用了`Theme.Sherlock`和`Theme.Sherlock.Light`两种主题,分别对应暗色和亮色背景下的`...