【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
作者 : 萬境絕塵 (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) 樣式示例?
樣式資源文件 :?
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"><style name="text1"><item name="android:gravity">center</item><item name="android:textColor">@android:color/holo_green_dark</item><item name="android:textSize">30dp</item><item name="android:textStyle">bold</item><item name="android:padding">20dip</item><item name="android:background">@android:color/holo_orange_light</item></style><style name="text2"><item name="android:gravity">center</item><item name="android:textColor">@android:color/holo_blue_dark</item><item name="android:textSize">40dp</item><item name="android:textStyle">italic</item><item name="android:padding">30dip</item><item name="android:background">@android:color/holo_red_light</item></style></resources>
布局文件 :?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="cn.org.octopus.actionbar.style.MainActivity$PlaceholderFragment" ><TextView android:id="@+id/text1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="樣式一"style="@style/text1"/><TextView android:id="@+id/text2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"android:layout_below="@id/text1"android:text="樣式二"style="@style/text2"/></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?
android:theme="@android:style/Theme.Dialog" : Activity顯示為對話框模式 android:theme="@android:style/Theme.NoTitleBar" : 不顯示應用程序標題欄 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不顯示應用程序標題欄,并全屏 android:theme="Theme.Light ": 背景為白色 android:theme="Theme.Light.NoTitleBar" : 白色背景并無標題欄 android:theme="Theme.Light.NoTitleBar.Fullscreen" : 白色背景,無標題欄,全屏 android:theme="Theme.Black" : 背景黑色 android:theme="Theme.Black.NoTitleBar" : 黑色背景并無標題欄 android:theme="Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,無標題欄,全屏 android:theme="Theme.Wallpaper" : 用系統桌面為應用程序背景 android:theme="Theme.Wallpaper.NoTitleBar" : 用系統桌面為應用程序背景,且無標題欄 android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系統桌面為應用程序背景,無標題欄,全屏 android:theme="Theme.Translucent : 透明背景 android:theme="Theme.Translucent.NoTitleBar" : 透明背景并無標題 android:theme="Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景并無標題,全屏 android:theme="Theme.Panel ": 面板風格顯示 android:theme="Theme.Light.Panel" : 平板風格顯示
(4) 常用的 Theme 設置屬性
<item name="windowBackground">@android:drawable/screen_background_selector_dark</item> 界面背景圖片<item name="windowFrame">@null</item> 界面前景圖片<item name="windowNoTitle">false</item> 是否帶有標題<item name="windowFullscreen">false</item> 是否全屏<item name="windowIsFloating">false</item> 是否是懸浮窗
(5) Theme 示例程序
style 樣式 :?
<?xml version="1.0" encoding="utf-8"?> <resources><style name="octopus_style"><item name="android:windowBackground">@drawable/bg1</item><item name="android:windowFullscreen">true</item><item name="android:windowNoTitle">true</item><item name="android:windowIsFloating">true</item></style> </resources>
Manifest.xml 中配置 :?
<activityandroid:name="cn.org.octopus.actionbar.style.MainActivity"android:label="@string/app_name" android:theme="@style/octopus_style">
頁面示例 :?
二. ActionBar 樣式解析
1. AppTheme 解析
(1) AppTheme 引入
在 AndroidManifest.xml 中默認的主題 : AppTheme, AppTheme 是在 /res/alues/style.xml 中定義的;
<applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" >
(2) AppTheme 定義
style.xml 文件 : 該文件定義了 AppTheme 主題;
-- 代碼示例 :?
<resources><!--Base application theme, dependent on API level. This theme is replacedby AppBaseTheme from res/values-vXX/styles.xml on newer devices.--><style name="AppBaseTheme" parent="android:Theme.Light"><!--Theme customizations available in newer API levels can go inres/values-vXX/styles.xml, while customizations related tobackward-compatibility can go here.--></style><!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- All customizations that are NOT specific to a particular API-level can go here. --></style></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 , 會覆蓋該項;
<!--Base application theme, dependent on API level. This theme is replacedby AppBaseTheme from res/values-vXX/styles.xml on newer devices.--><style name="AppBaseTheme" parent="android:Theme.Light"><!--Theme customizations available in newer API levels can go inres/values-vXX/styles.xml, while customizations related tobackward-compatibility can go here.--></style>
定義在 /res/values-11/style.xml 中的 AppBaseTheme ?: 如果 API 的版本 高于 11, 就會默認使用該 AppBaseTheme;
<resources><!--Base application theme for API 11+. This theme completely replacesAppBaseTheme from res/values/styles.xml on API 11+ devices.--><style name="AppBaseTheme" parent="android:Theme.Holo.Light"><!-- API 11 theme customizations can go here. --></style></resources>
定義在 /res/values-14/style.xml 中的 AppBaseTheme ?: 如果 API 的版本 高于 14, 就會默認使用該 AppBaseTheme;
<resources><!--Base application theme for API 14+. This theme completely replacesAppBaseTheme from BOTH res/values/styles.xml andres/values-v11/styles.xml on API 14+ devices.--><style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"><!-- API 14 theme customizations can g o here. --></style></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 文件中;
-- 代碼示例 :?
<!-- Variant of the holographic (light) theme that has a solid (opaque) action barwith an inverse color profile. The dark action bar sharply stands out againstthe light content. --><style name="Theme.Holo.Light.DarkActionBar"><item name="android:windowContentOverlay">@android:drawable/ab_solid_shadow_holo</item><item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item><item name="actionBarWidgetTheme">@android:style/Theme.Holo</item><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="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_dark</item><item name="actionBarTabStyle">@style/Widget.Holo.Light.ActionBar.TabView.Inverse</item><item name="actionBarTabBarStyle">@style/Widget.Holo.Light.ActionBar.TabBar.Inverse</item><item name="actionBarTabTextStyle">@style/Widget.Holo.Light.ActionBar.TabText.Inverse</item><item name="actionBarDivider">@android:drawable/list_divider_holo_dark</item><item name="actionBarItemBackground">@android:drawable/item_background_holo_dark</item><item name="actionMenuTextColor">?android:attr/textColorPrimaryInverse</item><item name="actionModeStyle">@style/Widget.Holo.Light.ActionMode.Inverse</item><item name="actionModeCloseButtonStyle">@style/Widget.Holo.ActionButton.CloseMode</item><item name="actionModePopupWindowStyle">@android:style/Widget.Holo.PopupWindow.ActionMode</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></style>
(1) ActionBar 樣式?
android:actionBarStyle 樣式作用 : 定義 ActionBar 的 標題 副標題樣式, 背景, 分割條, 進度條樣式等;
屬性名稱 :?android:actionBarStyle, 樣式的名稱為?Widget.Holo.Light.ActionBar.Solid.Inverse, 該樣式定義在??sdk/platforms/android-19/data/res/values/styles.xml?中?.?
<item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>Widget.Holo.Light.ActionBar.Solid.Inverse?樣式具體內容 :?
<style name="Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse</item><item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse</item><item name="android:background">@android:drawable/ab_solid_dark_holo</item><item name="android:backgroundStacked">@android:drawable/ab_stacked_solid_dark_holo</item><item name="android:backgroundSplit">@android:drawable/ab_bottom_solid_inverse_holo</item><item name="android:divider">@android:drawable/list_divider_holo_dark</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>
重要的屬性解析 :
--?android:titleTextStyle : 標題樣式, 可以修改標題文字相關的屬性;
--?android:subtitleTextStyle : 副標題樣式;
--?android:background : 背景, 可以修改 ActionBar 背景;
(2) ActionBar 按鈕樣式
actionButtonStyle 樣式作用 : 控制 ActionBar 上的按鈕樣式, 如 菜單按鈕等;
ActionBar 按鈕屬性 :?actionButtonStyle, 屬性值為?@android:style/Widget.Holo.ActionButton ;
<item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item>
android:style/Widget.Holo.ActionButton 具體屬性 : 該樣式繼承了?Widget.ActionButton 樣式;
<style name="Widget.Holo.ActionButton" parent="Widget.ActionButton"><item name="android:minWidth">@android:dimen/action_button_min_width</item><item name="android:gravity">center</item><item name="android:paddingStart">12dip</item><item name="android:paddingEnd">12dip</item><item name="android:scaleType">center</item><item name="android:maxLines">2</item></style>-- Widget.ActionButton?樣式 :?
<style name="Widget.ActionButton"><item name="android:background">?android:attr/actionBarItemBackground</item><item name="android:paddingStart">12dip</item><item name="android:paddingEnd">12dip</item><item name="android:minWidth">@android:dimen/action_button_min_width</item><item name="android:minHeight">?android:attr/actionBarSize</item><item name="android:gravity">center</item><item name="android:maxLines">2</item></style>
(3) Tab 標簽樣式
actionBarTabStyle 樣式作用 : 定義 ActionBar Tab 導航時 Tab 標簽樣式;
Tab 標簽樣式屬性 :?actionBarTabStyle, 樣式為?@style/Widget.Holo.Light.ActionBar.TabView.Inverse, 該樣式為 空, 沒有定義任何屬性;
item name="actionBarTabStyle">@style/Widget.Holo.Light.ActionBar.TabView.Inverse</item>
(4) 其它樣式
actionBarDivider 樣式 : ActionBar 各項目之間的分隔符, 指定了一個 drawable 資源;
<item name="actionBarDivider">@android:drawable/list_divider_holo_dark</item>
菜單文字顏色 :?actionMenuTextColor, 指定菜單中文字的顏色;
<item name="actionMenuTextColor">?android:attr/textColorPrimaryInverse</item>
actionBarTabBarStyle 樣式 : 定義 ActionBar Tab 導航中 Tab 的分割條, 指定一個 drawable 資源;
<item name="actionBarTabBarStyle">@style/Widget.Holo.Light.ActionBar.TabBar.Inverse</item>
actionDropDownStyle 樣式 : 指定 ActionBar List 導航 下拉列表樣式;
<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 :?
<!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- All customizations that are NOT specific to a particular API-level can go here. --></style>
AppBaseTheme :?
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"><!-- API 14 theme customizations can go here. --></style>
Theme.Holo.Light.DarkActionBar :?
<style name="Theme.Holo.Light.DarkActionBar"><item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>more ... ... </style>
Widget.Holo.Light.ActionBar.Solid.Inverse :?
<style name="Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse</item><item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse</item><item name="android:background">@android:drawable/ab_solid_dark_holo</item><item name="android:backgroundStacked">@android:drawable/ab_stacked_solid_dark_holo</item><item name="android:backgroundSplit">@android:drawable/ab_bottom_solid_inverse_holo</item><item name="android:divider">@android:drawable/list_divider_holo_dark</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>
(3) 樣式定義
重寫 android:titleTextStyle 樣式 :?
<!-- 重寫 android:titleTextStyle 樣式, 繼承 @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse 樣式 --><style name="OctopusActionBarTittle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"><item name="android:textColor">@android:color/holo_green_dark</item><item name="android:textStyle">italic</item><item name="android:textSize">25sp</item></style>
重寫 android:actionBarStyle 樣式 :?
<!-- 重寫 android:actionBarStyle 樣式集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 樣式--><style name="OctopusActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:titleTextStyle">@style/OctopusActionBarTittle</item></style>
覆蓋 android:actionBarStyle 樣式 :?
<!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- 覆蓋 android:actionBarStyle 樣式 --><item name="android:actionBarStyle">@style/OctopusActionBarStyle</item></style>
(4) 代碼示例
/res/values/styles.xml 代碼 :?
<resources xmlns:android="http://schemas.android.com/apk/res/android"><!--Base application theme, dependent on API level. This theme is replacedby AppBaseTheme from res/values-vXX/styles.xml on newer devices.--><style name="AppBaseTheme" parent="android:Theme.Light"><!--Theme customizations available in newer API levels can go inres/values-vXX/styles.xml, while customizations related tobackward-compatibility can go here.--></style><!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- 覆蓋 android:actionBarStyle 樣式 --><item name="android:actionBarStyle">@style/OctopusActionBarStyle</item></style><!-- 重寫 android:actionBarStyle 樣式集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 樣式--><style name="OctopusActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:titleTextStyle">@style/OctopusActionBarTittle</item></style><!-- 重寫 android:titleTextStyle 樣式, 繼承 @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse 樣式 --><style name="OctopusActionBarTittle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"><item name="android:textColor">@android:color/holo_green_dark</item><item name="android:textStyle">italic</item><item name="android:textSize">25sp</item></style> </resources>
界面效果 :?
2. 自定義菜單文字樣式
(1) 系統默認樣式
默認樣式下的界面顯示 :?
(2) 自定義菜單
自定義菜單樣式 :?
<!-- 自定義的菜單樣式--><style name="OctopusMenuTittleStyle"parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"><item name="android:textColor">@android:color/white</item><item name="android:textStyle">bold</item><item name="android:textSize">20sp</item></style>
AppTheme 中覆蓋 android:actionMenuTextAppearance?屬性 :?
<style name="AppTheme" parent="AppBaseTheme"><!-- 覆蓋 android:actionBarStyle 樣式, 自定義 標題 樣式 --><item name="android:actionBarStyle">@style/OctopusActionBarStyle</item><!-- 覆蓋 android:actionMenuTextAppearance 樣式, 自定義 菜單文字樣式 --><item name="android:actionMenuTextAppearance">@style/OctopusMenuTittleStyle</item></style>
(3) 代碼示例
完整 /res/values/styles.xml 代碼 :?
<resources xmlns:android="http://schemas.android.com/apk/res/android"><!--Base application theme, dependent on API level. This theme is replacedby AppBaseTheme from res/values-vXX/styles.xml on newer devices.--><style name="AppBaseTheme" parent="android:Theme.Light"><!--Theme customizations available in newer API levels can go inres/values-vXX/styles.xml, while customizations related tobackward-compatibility can go here.--></style><!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- 覆蓋 android:actionBarStyle 樣式, 自定義 標題 樣式 --><item name="android:actionBarStyle">@style/OctopusActionBarStyle</item><!-- 覆蓋 android:actionMenuTextAppearance 樣式, 自定義 菜單文字樣式 --><item name="android:actionMenuTextAppearance">@style/OctopusMenuTittleStyle</item></style><!-- 重寫 android:actionBarStyle 樣式集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 樣式--><style name="OctopusActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:titleTextStyle">@style/OctopusActionBarTittle</item></style><!-- 重寫 android:titleTextStyle 樣式, 繼承 @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse 樣式 --><style name="OctopusActionBarTittle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"><item name="android:textColor">@android:color/holo_green_dark</item><item name="android:textStyle">italic</item><item name="android:textSize">25sp</item></style><!-- 自定義的菜單樣式--><style name="OctopusMenuTittleStyle"parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"><item name="android:textColor">@android:color/white</item><item name="android:textStyle">bold</item><item name="android:textSize">20sp</item></style> </resources>
界限展示效果 :?
3. 修改 ActionBar 背景色
在 android:actionBarStyle 樣式中修改即可 :?
<!-- 重寫 android:actionBarStyle 樣式集成 @android:style/Widget.Holo.Light.ActionBar.Solid.Inverse 樣式--><style name="OctopusActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:titleTextStyle">@style/OctopusActionBarTittle</item><item name="android:background">@android:color/darker_gray</item></style>
界面效果 :?
4. 自定義左側的小箭頭
在 Activity 中添加代碼 : 顯示 左側的小箭頭;
-- 顯示箭頭代碼 :?
/* 獲取 ActionBar 對象 */ActionBar actionBar = getActionBar();/* 設置標題可點擊, 并且添加 向左的小箭頭 */actionBar.setDisplayHomeAsUpEnabled(true);-- 效果 : 箭頭太小, 且不美觀;
小箭頭定義位置 : 小箭頭 在?Theme.Holo.Light.DarkActionBar 樣式中定義;
<item name="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_dark</item>
自定義小箭頭 : 直接在 AppTheme 樣式下 重寫?android:homeAsUpIndicator 屬性即可
<!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- 覆蓋 android:actionBarStyle 樣式, 自定義 標題 樣式 --><item name="android:actionBarStyle">@style/OctopusActionBarStyle</item><!-- 覆蓋 android:actionMenuTextAppearance 樣式, 自定義 菜單文字樣式 --><item name="android:actionMenuTextAppearance">@style/OctopusMenuTittleStyle</item><!-- 自定義向左的小箭頭 --><item name="android:homeAsUpIndicator">@drawable/back</item></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
總結
以上是生活随笔為你收集整理的【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 应用开发】 Actio
- 下一篇: 【TCP/IP 协议】 TCP/IP 基