ActionBar 样式详解

来源:互联网 发布:希尔伯特矩阵的逆 编辑:程序博客网 时间:2024/05/20 05:08

作者 万境绝尘 (octopus_truth@163.com)

转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/39269163


示例代码下载 : 

-- GitHub : https://github.com/han1202012/Octopus_ActionBarStyle.git 

-- CSDN : http://download.csdn.net/detail/han1202012/7926959




一. 样式 和 主题 资源



1. 样式资源解析



(1) 样式简介


样式解析 : 样式是设置给 View 组件的多个属性的集合

-- 样式的好处 : 给一个 TextView 设置 文字大小, 颜色, 对齐方式等, 如果需要给多个 TextView 设置同样的属性, 这里使用样式就可以大大节省了代码量;


样式指定 : 每个 View 组件都有一个 style 属性, 可以通过该属性指定 样式, 注意与 android:style 属性区分;



(2) 样式标签定义


样式定义的位置 /res/values/ 目录下的 跟标签是 <resources /> 标签的 xml 文件, 如默认的 styles.xml 文件;


样式标签解析 : <style /> 标签在 <resources /> 标签内, <style /> 标签的子标签是 <item />;

-- 根标签 : <style /> 标签都是定义在 <resources /> 标签内部;

-- 子标签 : <item /> 标签是 <style /> 标签的子标签, 其定义了具体的 View 组件的属性;


<style /> 标签属性 : 

-- name 属性 : 指定样式的名称, 如 定义 TextView 组件, name 属性可以是 "android:textColor" 等 TextView 组件的属性;

-- parent 属性 : <style /> 标签可以继承另外一个标签, 该标签会获得被集成标签的所有属性格式, 重复定义属性格式, 子标签的属性会覆盖父标签的属性;



(3) 样式示例 


样式资源文件 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  3.       
  4.     <style name="text1">  
  5.         <item name="android:gravity">center</item>  
  6.         <item name="android:textColor">@android:color/holo_green_dark</item>  
  7.         <item name="android:textSize">30dp</item>  
  8.         <item name="android:textStyle">bold</item>  
  9.         <item name="android:padding">20dip</item>  
  10.         <item name="android:background">@android:color/holo_orange_light</item>  
  11.     </style>  
  12.       
  13.     <style name="text2">  
  14.         <item name="android:gravity">center</item>  
  15.         <item name="android:textColor">@android:color/holo_blue_dark</item>  
  16.         <item name="android:textSize">40dp</item>  
  17.         <item name="android:textStyle">italic</item>  
  18.         <item name="android:padding">30dip</item>  
  19.         <item name="android:background">@android:color/holo_red_light</item>  
  20.     </style>  
  21.       
  22. </resources>  

布局文件 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:paddingBottom="@dimen/activity_vertical_margin"  
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  7.     android:paddingRight="@dimen/activity_horizontal_margin"  
  8.     android:paddingTop="@dimen/activity_vertical_margin"  
  9.     tools:context="cn.org.octopus.actionbar.style.MainActivity$PlaceholderFragment" >  
  10.   
  11.     <TextView   
  12.         android:id="@+id/text1"  
  13.         android:layout_width="match_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:text="样式一"  
  16.         style="@style/text1"/>  
  17.       
  18.     <TextView   
  19.         android:id="@+id/text2"  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:layout_marginTop="30dp"  
  23.         android:layout_below="@id/text1"  
  24.         android:text="样式二"  
  25.         style="@style/text2"/>  
  26.   
  27. </RelativeLayout>  

页面展示效果 : 




2. 主题资源解析



(1) 主题资源 与 样式资源比较


主题资源 与 样式资源 相同点 : 定义方式基本相同, 都是在 /res/values 目录下的 带 <resources /> 根标签的 xml 中定义;


主题资源 与 样式资源 不同点 : 

-- 作用范围 : 样式资源一般作用于 单个 View 组件, 主题资源作用于 整个 Application 应用 或者 指定的 Activity, Theme 是在 AndroidManifest.xml 中指定的;

-- 属性内容 : 主题资源一般用于定义改变窗口的外观格式等;



(2) Theme 主题设置方法


Theme 主题使用方法 : 

-- 在 Manifest.xml 文件中配置 : 为 <application /> 或者 <activity /> 标签设置 android.theme 属性 "@style/style_name", 设置的也是一个 style 样式属性;

-- Activity 代码中设置 : 在 onCreate() 方法的 setContentView() 方法之前调用 setTheme(R.style.style_name) 方法设置 Theme 主题, 如果在 setComtentView 之后调用就不会起作用;



(3) Android 系统定义的 Theme 


[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式  
  2. android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏  
  3. android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏  
  4. android:theme="Theme.Light ": 背景为白色  
  5. android:theme="Theme.Light.NoTitleBar" : 白色背景并无标题栏  
  6. android:theme="Theme.Light.NoTitleBar.Fullscreen" : 白色背景,无标题栏,全屏  
  7. android:theme="Theme.Black" : 背景黑色  
  8. android:theme="Theme.Black.NoTitleBar" : 黑色背景并无标题栏  
  9. android:theme="Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,无标题栏,全屏  
  10. android:theme="Theme.Wallpaper" : 用系统桌面为应用程序背景  
  11. android:theme="Theme.Wallpaper.NoTitleBar" : 用系统桌面为应用程序背景,且无标题栏  
  12. android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系统桌面为应用程序背景,无标题栏,全屏  
  13. android:theme="Theme.Translucent : 透明背景  
  14. android:theme="Theme.Translucent.NoTitleBar" : 透明背景并无标题  
  15. android:theme="Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景并无标题,全屏  
  16. android:theme="Theme.Panel ": 面板风格显示  
  17. android:theme="Theme.Light.Panel" : 平板风格显示  


(4) 常用的 Theme 设置属性


[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="windowBackground">@android:drawable/screen_background_selector_dark</item> 界面背景图片  
  2. <item name="windowFrame">@null</item>   界面前景图片  
  3. <item name="windowNoTitle">false</item> 是否带有标题  
  4. <item name="windowFullscreen">false</item>  是否全屏  
  5. <item name="windowIsFloating">false</item>  是否是悬浮窗  


(5) Theme 示例程序


style 样式 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <style name="octopus_style">  
  4.         <item name="android:windowBackground">@drawable/bg1</item>  
  5.         <item name="android:windowFullscreen">true</item>  
  6.         <item name="android:windowNoTitle">true</item>  
  7.         <item name="android:windowIsFloating">true</item>  
  8.     </style>  
  9. </resources>  

Manifest.xml 中配置 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <activity  
  2.     android:name="cn.org.octopus.actionbar.style.MainActivity"  
  3.     android:label="@string/app_name"   
  4.     android:theme="@style/octopus_style">  

页面示例 




二. ActionBar 样式解析



1. AppTheme 解析



(1) AppTheme 引入


在 AndroidManifest.xml 中默认的主题 : AppTheme, AppTheme 是在 /res/alues/style.xml 中定义的;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <application  
  2.     android:allowBackup="true"  
  3.     android:icon="@drawable/ic_launcher"  
  4.     android:label="@string/app_name"  
  5.     android:theme="@style/AppTheme" >  


(2) AppTheme 定义


style.xml 文件 : 该文件定义了 AppTheme 主题;

-- 代码示例 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <resources>  
  2.   
  3.     <!--  
  4.         Base application theme, dependent on API level. This theme is replaced  
  5.         by AppBaseTheme from res/values-vXX/styles.xml on newer devices.  
  6.     -->  
  7.     <style name="AppBaseTheme" parent="android:Theme.Light">  
  8.         <!--  
  9.             Theme customizations available in newer API levels can go in  
  10.             res/values-vXX/styles.xml, while customizations related to  
  11.             backward-compatibility can go here.  
  12.         -->  
  13.     </style>  
  14.   
  15.     <!-- Application theme. -->  
  16.     <style name="AppTheme" parent="AppBaseTheme">  
  17.         <!-- All customizations that are NOT specific to a particular API-level can go here. -->  
  18.     </style>  
  19.       
  20. </resources>  
-- 代码解析 : AppTheme 主题继承了 AppBaseTheme 主题, 而 AppBaseTheme 主题确不是固定的, 在 /res/values-v14 中的 style.xml 中也定义了 AppBaseTheme, 该 AppBaseTheme 可以覆盖 在 res/values/style.xml 中定义的主题;




2. AppBaseTheme 解析



(1) AppBaseTheme 简介 


AppBaseTheme 简介 : 

-- AppBaseTheme 父类 : 在 Android 工程创建时会有一个选择 Theme 的标题样式, AppBaseTheme 就会继承这个样式;

-- AppBaseTheme 位置 : 在 Android 工程中, /res/values/style.xml /res/vaules-v11/style.xml res/values-v14/style.xml 中都定义了 AppBaseTheme 主题; 

-- style 样式优先级 : 定义在 values-vxx 中的样式优先级会高于 定义在 values 中的样式, 如果有重复定义 优先级高的会覆盖优先级低的;



(2) AppBaseTheme 代码分析


定义在 /res/values/style.xml 中的 AppBaseTheme : 该主题依赖于 API 版本, 如果在对应版本的 values 中定义了 AppBaseTheme , 会覆盖该项;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!--  
  2.     Base application theme, dependent on API level. This theme is replaced  
  3.     by AppBaseTheme from res/values-vXX/styles.xml on newer devices.  
  4. -->  
  5. <style name="AppBaseTheme" parent="android:Theme.Light">  
  6.     <!--  
  7.         Theme customizations available in newer API levels can go in  
  8.         res/values-vXX/styles.xml, while customizations related to  
  9.         backward-compatibility can go here.  
  10.     -->  
  11. </style>  

定义在 /res/values-11/style.xml 中的 AppBaseTheme : 如果 API 的版本 高于 11, 就会默认使用该 AppBaseTheme;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <resources>  
  2.   
  3.     <!--  
  4.         Base application theme for API 11+. This theme completely replaces  
  5.         AppBaseTheme from res/values/styles.xml on API 11+ devices.  
  6.     -->  
  7.     <style name="AppBaseTheme" parent="android:Theme.Holo.Light">  
  8.         <!-- API 11 theme customizations can go here. -->  
  9.     </style>  
  10.   
  11. </resources>  

定义在 /res/values-14/style.xml 中的 AppBaseTheme : 如果 API 的版本 高于 14, 就会默认使用该 AppBaseTheme;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <resources>  
  2.   
  3.     <!--  
  4.         Base application theme for API 14+. This theme completely replaces  
  5.         AppBaseTheme from BOTH res/values/styles.xml and  
  6.         res/values-v11/styles.xml on API 14+ devices.  
  7.     -->  
  8.     <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">  
  9.         <!-- API 14 theme customizations can g o here. -->  
  10.     </style>  
  11.   
  12. </resources>  


3. Activity 主题样式 android:Theme.Holo.Light.DarkActionBar 


这里我们分析 API-14 对应的主题样式 : 在上面的 /res/values-v14/style.xml 中定义的 AppBaseTheme 如果在 API-14 的情况下继承的是 android:Theme.Holo.Light.DarkActionBar 主题样式, 该主题定义在 sdk/platforms/android-19/data/res/values/themes.xml 文件中;

-- 代码示例 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- Variant of the holographic (light) theme that has a solid (opaque) action bar  
  2.      with an inverse color profile. The dark action bar sharply stands out against  
  3.      the light content. -->  
  4. <style name="Theme.Holo.Light.DarkActionBar">  
  5.     <item name="android:windowContentOverlay">@android:drawable/ab_solid_shadow_holo</item>  
  6.     <item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>  
  7.     <item name="actionBarWidgetTheme">@android:style/Theme.Holo</item>  
  8.   
  9.     <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item>  
  10.     <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item>  
  11.     <item name="actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item>  
  12.     <item name="actionModeBackground">@android:drawable/cab_background_top_holo_dark</item>  
  13.     <item name="actionModeSplitBackground">@android:drawable/cab_background_bottom_holo_dark</item>  
  14.     <item name="actionModeCloseDrawable">@android:drawable/ic_cab_done_holo_dark</item>  
  15.     <item name="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_dark</item>  
  16.     <item name="actionBarTabStyle">@style/Widget.Holo.Light.ActionBar.TabView.Inverse</item>  
  17.     <item name="actionBarTabBarStyle">@style/Widget.Holo.Light.ActionBar.TabBar.Inverse</item>  
  18.     <item name="actionBarTabTextStyle">@style/Widget.Holo.Light.ActionBar.TabText.Inverse</item>  
  19.     <item name="actionBarDivider">@android:drawable/list_divider_holo_dark</item>  
  20.     <item name="actionBarItemBackground">@android:drawable/item_background_holo_dark</item>  
  21.     <item name="actionMenuTextColor">?android:attr/textColorPrimaryInverse</item>  
  22.     <item name="actionModeStyle">@style/Widget.Holo.Light.ActionMode.Inverse</item>  
  23.     <item name="actionModeCloseButtonStyle">@style/Widget.Holo.ActionButton.CloseMode</item>  
  24.     <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.PopupWindow.ActionMode</item>  
  25.   
  26.     <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item>  
  27.     <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item>  
  28.     <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item>  
  29.     <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item>  
  30.     <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item>  
  31.     <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item>  
  32.     <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_dark</item>  
  33. </style>  



(1) ActionBar 样式 


android:actionBarStyle 样式作用 : 定义 ActionBar 的 标题 副标题样式, 背景, 分割条, 进度条样式等;


属性名称 : android:actionBarStyle, 样式的名称为 Widget.Holo.Light.ActionBar.Solid.Inverse, 该样式定义在  sdk/platforms/android-19/data/res/values/styles.xml 中 . 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>  

Widget.Holo.Light.ActionBar.Solid.Inverse 样式具体内容 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="Widget.Holo.Light.ActionBar.Solid.Inverse">  
  2.     <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse</item>  
  3.     <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse</item>  
  4.     <item name="android:background">@android:drawable/ab_solid_dark_holo</item>  
  5.     <item name="android:backgroundStacked">@android:drawable/ab_stacked_solid_dark_holo</item>  
  6.     <item name="android:backgroundSplit">@android:drawable/ab_bottom_solid_inverse_holo</item>  
  7.     <item name="android:divider">@android:drawable/list_divider_holo_dark</item>  
  8.     <item name="android:progressBarStyle">@android:style/Widget.Holo.ProgressBar.Horizontal</item>  
  9.     <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.ProgressBar</item>  
  10.     <item name="android:progressBarPadding">32dip</item>  
  11.     <item name="android:itemPadding">8dip</item>  
  12. </style>  

重要的属性解析 :

-- android:titleTextStyle : 标题样式, 可以修改标题文字相关的属性;

-- android:subtitleTextStyle : 副标题样式;

-- android:background : 背景, 可以修改 ActionBar 背景;



(2) ActionBar 按钮样式


actionButtonStyle 样式作用 : 控制 ActionBar 上的按钮样式, 如 菜单按钮等;


ActionBar 按钮属性 : actionButtonStyle, 属性值为 @android:style/Widget.Holo.ActionButton ;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item>  

android:style/Widget.Holo.ActionButton 具体属性 : 该样式继承了 Widget.ActionButton 样式;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="Widget.Holo.ActionButton" parent="Widget.ActionButton">  
  2.     <item name="android:minWidth">@android:dimen/action_button_min_width</item>  
  3.     <item name="android:gravity">center</item>  
  4.     <item name="android:paddingStart">12dip</item>  
  5.     <item name="android:paddingEnd">12dip</item>  
  6.     <item name="android:scaleType">center</item>  
  7.     <item name="android:maxLines">2</item>  
  8. </style>  
-- Widget.ActionButton 样式 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="Widget.ActionButton">  
  2.     <item name="android:background">?android:attr/actionBarItemBackground</item>  
  3.     <item name="android:paddingStart">12dip</item>  
  4.     <item name="android:paddingEnd">12dip</item>  
  5.     <item name="android:minWidth">@android:dimen/action_button_min_width</item>  
  6.     <item name="android:minHeight">?android:attr/actionBarSize</item>  
  7.     <item name="android:gravity">center</item>  
  8.     <item name="android:maxLines">2</item>  
  9. </style>  


(3) Tab 标签样式


actionBarTabStyle 样式作用 : 定义 ActionBar Tab 导航时 Tab 标签样式;


Tab 标签样式属性 : actionBarTabStyle, 样式为 @style/Widget.Holo.Light.ActionBar.TabView.Inverse, 该样式为 空, 没有定义任何属性;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. item name="actionBarTabStyle">@style/Widget.Holo.Light.ActionBar.TabView.Inverse</item>  



(4) 其它样式


actionBarDivider 样式 : ActionBar 各项目之间的分隔符, 指定了一个 drawable 资源;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="actionBarDivider">@android:drawable/list_divider_holo_dark</item>  

菜单文字颜色 : actionMenuTextColor, 指定菜单中文字的颜色;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="actionMenuTextColor">?android:attr/textColorPrimaryInverse</item>  

actionBarTabBarStyle 样式 : 定义 ActionBar Tab 导航中 Tab 的分割条, 指定一个 drawable 资源;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="actionBarTabBarStyle">@style/Widget.Holo.Light.ActionBar.TabBar.Inverse</item>  

actionDropDownStyle 样式 : 指定 ActionBar List 导航 下拉列表样式;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item>  



三. 自定义 ActionBar 样式


默认的 ActionBar 样式 : 




1. 自定义标题样式



(1) 样式解析 


查找标题样式定义位置 : 

-- 样式的继承关系 : AppTheme 是直接使用的样式, AppTheme 继承了 AppBaseTheme, AppBaseTheme 继承了 android:Theme.Holo.Light.DarkActionBar 样式;

-- 标题样式位置 : android:titleTextStyle 样式在 android:actionBarStyle 中定义, android:actionBarStyle 在 android:Theme.Holo.Light.DarkActionBar 中定义;

-- 层次关系 : AppTheme 与 AppBaseTheme android:Theme.Holo.Light.DarkActionBar 是继承关系, 是同一层次的, 包含 android:actionBarStyle 样式, android:actionBarStyle 样式 包含 android:titleTextStyle 样式;


在 AppTheme 中覆盖 标题样式方法 : 

-- 需要实现一个 android:actionBarStyle 子样式 : 因为 AppTheme 层次高于 android:titleTextStyle 两层, 不能直接在 AppTheme 中定义该样式进行覆盖, 需要实现一个 android:actionBarStyle 子样式, 在该子样式中重新定义 android:titleTextStyle 样式, 即可覆盖掉标题样式;

-- 实现一个 android:titleTextStyle 子样式 : 该样式 也需要继承原样式, 覆盖一些属性;

-- AppTheme 重新定义 android:actionBarStyle 样式 : 上面将 android:actionBarStyle 样式 和 android:titleTextStyle 样式覆盖, 这里将已经重写的标题栏样式设置给 android:actionBarStyle 即可;



(2) 系统默认样式 


AppTheme : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- Application theme. -->  
  2. <style name="AppTheme" parent="AppBaseTheme">  
  3.     <!-- All customizations that are NOT specific to a particular API-level can go here. -->  
  4. </style>  

AppBaseTheme : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">  
  2.     <!-- API 14 theme customizations can go here. -->  
  3. </style>  

Theme.Holo.Light.DarkActionBar 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="Theme.Holo.Light.DarkActionBar">  
  2.     <item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>  
  3.   more ... ...   
  4. </style>  

Widget.Holo.Light.ActionBar.Solid.Inverse : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="Widget.Holo.Light.ActionBar.Solid.Inverse">  
  2.     <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse</item>  
  3.     <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse</item>  
  4.     <item name="android:background">@android:drawable/ab_solid_dark_holo</item>  
  5.     <item name="android:backgroundStacked">@android:drawable/ab_stacked_solid_dark_holo</item>  
  6.     <item name="android:backgroundSplit">@android:drawable/ab_bottom_solid_inverse_holo</item>  
  7.     <item name="android:divider">@android:drawable/list_divider_holo_dark</item>  
  8.     <item name="android:progressBarStyle">@android:style/Widget.Holo.ProgressBar.Horizontal</item>  
  9.     <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.ProgressBar</item>  
  10.     <item name="android:progressBarPadding">32dip</item>  
  11.     <item name="android:itemPadding">8dip</item>  
  12. </style>  



(3) 样式定义


重写 android:titleTextStyle 样式 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!--   
  2.     重写 android:titleTextStyle 样式,   
  3.     继承 @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse 样式   
  4. -->  
  5. <style   
  6.     name="OctopusActionBarTittle"   
  7.     parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">  
  8.     <item name="android:textColor">@android:color/holo_green_dark</item>  
  9.     <item name="android:textStyle">italic</item>  
  10.     <item name="android:textSize">25sp</item>  
  11. </style>  

重写 android:actionBarStyle 样式 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1.    <!--   
  2.     重写 android:actionBarStyle 样式  
  3.     集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 样式  
  4.     -->  
  5.    <style   
  6.        name="OctopusActionBarStyle"   
  7.        parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">  
  8.     <item name="android:titleTextStyle">@style/OctopusActionBarTittle</item>  
  9. </style>  

覆盖 android:actionBarStyle 样式 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- Application theme. -->  
  2. <style name="AppTheme" parent="AppBaseTheme">  
  3.     <!-- 覆盖 android:actionBarStyle 样式 -->  
  4.     <item name="android:actionBarStyle">@style/OctopusActionBarStyle</item>  
  5. </style>  


(4) 代码示例


/res/values/styles.xml 代码 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  2.   
  3.     <!--  
  4.         Base application theme, dependent on API level. This theme is replaced  
  5.         by AppBaseTheme from res/values-vXX/styles.xml on newer devices.  
  6.     -->  
  7.     <style name="AppBaseTheme" parent="android:Theme.Light">  
  8.         <!--  
  9.             Theme customizations available in newer API levels can go in  
  10.             res/values-vXX/styles.xml, while customizations related to  
  11.             backward-compatibility can go here.  
  12.         -->  
  13.     </style>  
  14.   
  15.     <!-- Application theme. -->  
  16.     <style name="AppTheme" parent="AppBaseTheme">  
  17.         <!-- 覆盖 android:actionBarStyle 样式 -->  
  18.         <item name="android:actionBarStyle">@style/OctopusActionBarStyle</item>  
  19.     </style>  
  20.       
  21.     <!--   
  22.         重写 android:actionBarStyle 样式  
  23.         集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 样式  
  24.      -->  
  25.     <style   
  26.         name="OctopusActionBarStyle"   
  27.         parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">  
  28.         <item name="android:titleTextStyle">@style/OctopusActionBarTittle</item>  
  29.     </style>  
  30.       
  31.     <!--   
  32.         重写 android:titleTextStyle 样式,   
  33.         继承 @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse 样式   
  34.     -->  
  35.     <style   
  36.         name="OctopusActionBarTittle"   
  37.         parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">  
  38.         <item name="android:textColor">@android:color/holo_green_dark</item>  
  39.         <item name="android:textStyle">italic</item>  
  40.         <item name="android:textSize">25sp</item>  
  41.     </style>  
  42. </resources>  

界面效果 : 




2. 自定义菜单文字样式


(1) 系统默认样式


默认样式下的界面显示 : 




(2) 自定义菜单


自定义菜单样式 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!--  
  2.     自定义的菜单样式 
  3.  -->  
  4. <style   
  5.     name="OctopusMenuTittleStyle"  
  6.     parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">  
  7.     <item name="android:textColor">@android:color/white</item>  
  8.     <item name="android:textStyle">bold</item>  
  9.     <item name="android:textSize">20sp</item>  
  10. </style>  

AppTheme 中覆盖 android:actionMenuTextAppearance 属性 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <style name="AppTheme" parent="AppBaseTheme">  
  2.     <!-- 覆盖 android:actionBarStyle 样式, 自定义 标题 样式 -->  
  3.     <item name="android:actionBarStyle">@style/OctopusActionBarStyle</item>  
  4.       
  5.     <!-- 覆盖 android:actionMenuTextAppearance 样式, 自定义 菜单文字样式 -->  
  6.     <item name="android:actionMenuTextAppearance">@style/OctopusMenuTittleStyle</item>  
  7. </style>  


(3) 代码示例


完整 /res/values/styles.xml 代码 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  2.   
  3.     <!--  
  4.         Base application theme, dependent on API level. This theme is replaced  
  5.         by AppBaseTheme from res/values-vXX/styles.xml on newer devices.  
  6.     -->  
  7.     <style name="AppBaseTheme" parent="android:Theme.Light">  
  8.         <!--  
  9.             Theme customizations available in newer API levels can go in  
  10.             res/values-vXX/styles.xml, while customizations related to  
  11.             backward-compatibility can go here.  
  12.         -->  
  13.     </style>  
  14.   
  15.     <!-- Application theme. -->  
  16.     <style name="AppTheme" parent="AppBaseTheme">  
  17.         <!-- 覆盖 android:actionBarStyle 样式, 自定义 标题 样式 -->  
  18.         <item name="android:actionBarStyle">@style/OctopusActionBarStyle</item>  
  19.           
  20.         <!-- 覆盖 android:actionMenuTextAppearance 样式, 自定义 菜单文字样式 -->  
  21.         <item name="android:actionMenuTextAppearance">@style/OctopusMenuTittleStyle</item>  
  22.     </style>  
  23.       
  24.     <!--   
  25.         重写 android:actionBarStyle 样式  
  26.         集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 样式  
  27.      -->  
  28.     <style   
  29.         name="OctopusActionBarStyle"   
  30.         parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">  
  31.         <item name="android:titleTextStyle">@style/OctopusActionBarTittle</item>  
  32.     </style>  
  33.       
  34.     <!--   
  35.         重写 android:titleTextStyle 样式,   
  36.         继承 @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse 样式   
  37.     -->  
  38.     <style   
  39.         name="OctopusActionBarTittle"   
  40.         parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">  
  41.         <item name="android:textColor">@android:color/holo_green_dark</item>  
  42.         <item name="android:textStyle">italic</item>  
  43.         <item name="android:textSize">25sp</item>  
  44.     </style>  
  45.       
  46.     <!--  
  47.         自定义的菜单样式 
  48.      -->  
  49.     <style   
  50.         name="OctopusMenuTittleStyle"  
  51.         parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">  
  52.         <item name="android:textColor">@android:color/white</item>  
  53.         <item name="android:textStyle">bold</item>  
  54.         <item name="android:textSize">20sp</item>  
  55.     </style>  
  56. </resources>  

界限展示效果 : 




3. 修改 ActionBar 背景色


在 android:actionBarStyle 样式中修改即可 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!--   
  2.     重写 android:actionBarStyle 样式  
  3.     集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 样式  
  4.  -->  
  5. <style   
  6.     name="OctopusActionBarStyle"   
  7.     parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">  
  8.     <item name="android:titleTextStyle">@style/OctopusActionBarTittle</item>  
  9.     <item name="android:background">@android:color/darker_gray</item>  
  10. ;/style>  

界面效果 : 




4. 自定义左侧的小箭头


在 Activity 中添加代码 : 显示 左侧的小箭头;

-- 显示箭头代码 : 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /* 获取 ActionBar 对象 */  
  2. ActionBar actionBar = getActionBar();  
  3. /* 设置标题可点击, 并且添加 向左的小箭头 */  
  4. actionBar.setDisplayHomeAsUpEnabled(true);  
-- 效果 : 箭头太小, 且不美观;



小箭头定义位置 : 小箭头 在 Theme.Holo.Light.DarkActionBar 样式中定义;

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <item name="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_dark</item>  

自定义小箭头 : 直接在 AppTheme 样式下 重写 android:homeAsUpIndicator 属性即可

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- Application theme. -->  
  2. <style name="AppTheme" parent="AppBaseTheme">  
  3.     <!-- 覆盖 android:actionBarStyle 样式, 自定义 标题 样式 -->  
  4.     <item name="android:actionBarStyle">@style/OctopusActionBarStyle</item>  
  5.       
  6.     <!-- 覆盖 android:actionMenuTextAppearance 样式, 自定义 菜单文字样式 -->  
  7.     <item name="android:actionMenuTextAppearance">@style/OctopusMenuTittleStyle</item>  
  8.       
  9.     <!-- 自定义向左的小箭头 -->  
  10.     <item name="android:homeAsUpIndicator">@drawable/back</item>  
  11. </style>  
-- 界面效果 : 





作者 万境绝尘 (octopus_truth@163.com)

转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/39269163


示例代码下载 : 

-- GitHub : https://github.com/han1202012/Octopus_ActionBarStyle.git 

-- CSDN : http://download.csdn.net/detail/han1202012/7926959

0 0
原创粉丝点击