android 自定义主题样式

From: http://blog.csdn.net/dawanganban/article/details/17732701


http://www.cnblogs.com/bluestorm/archive/2012/07/12/2588724.html


Android系统自带样式(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" : 平板风格显示

还记得在Android菜鸟的成长笔记(3)中我们曾经遇到了一个问题吗?"这个界面和真真的QQ界面还有点不同的就是上面的标题myFirstApp,怎么去掉这个标题呢?",当时我直接在AndroidMainfest.xml中添加了一个属性:

  1. android:theme="@android:style/Theme.NoTitleBar"   

可能有的朋友就会迷惑了,为什么添加了这个属性就可以了。这一篇文章将让我们一起翻开Android系统源代码来揭开困扰大家的关于主题使用以及自定义的谜团。

一、样式(Style)与主题(Theme)

在Android的应用的资源文件中有一个style.xml文件,这个文件是干什么用的呢?我们有时候经常需要对某个类型的组件指定大致相似的格式,比如字体、颜色、背景色等,如果我们每次都为某个View组件去重复指定这些属性,这无疑会产生大量的工作,而且还不利于后期的代码修改和维护。而Style就是一个样式的格式,这个格式可以被多个View组件所使用,也可以说是一个样式的集合类,被需要这一类样式集合的View组件所使用。例如我们前面写的QQ登录界面中的登录按钮,我们可以给定义一个样式

  1. <style name="buttonStyle">  
  2.     <item name="android:background">@drawable/login_button_noritem>  
  3.     <item name="android:textColor">@color/buttonTextColoritem>  
  4. style>  

在布局文件中引入样式

  1. <Button   
  2.     android:layout_width="270dip"  
  3.     android:layout_height="40dip"  
  4.     android:text="@string/login_button"  
  5.     style="@style/buttonStyle"  
  6.     />  
与样式非常相似,主题资源的xml文件通常也放在/res/values目录下,主题相当于整个应用或者某个Activity的样式,换句话说主题是针对窗体级别或整个应用程序的样式。与样式比较,样式是针对窗体内元素的样式。主题的设置有两种方式

(1)在AndroidMainfest.xml中为Activity或者application指定主题

  1. <application  
  2.     android:allowBackup="true"  
  3.     android:icon="@drawable/ic_launcher"  
  4.     android:label="@string/app_name"  
  5.     android:theme="@android:style/Theme.NoTitleBar" >  
  6.     <activity  
  7.         android:name="com.example.myfirstapp.MainActivity"  
  8.         android:label="@string/app_name" >  
  9.         <intent-filter>  
  10.             <action android:name="android.intent.action.MAIN" />  
  11.   
  12.             <category android:name="android.intent.category.LAUNCHER" />  
  13.         intent-filter>  
  14.     activity>  
  15. application>  

上面AndroidMainfest.xml代码中给整个应用指定了一个主题,这个主题是没有标题栏的系统主题。

(2)在Activity创建时调用 setTheme方法(必须在setContentView前面调用)来给某个Activity添加主题。

二、剖析主题(Theme)资源

我们先来创建一个工程名字为helloworld,然后打开它的AndroiodMainfest.xml文件

  1. <application  
  2.     android:allowBackup="true"  
  3.     android:icon="@drawable/ic_launcher"  
  4.     android:label="@string/app_name"  
  5.     android:theme="@style/AppTheme" >  
  6.     <activity  
  7.         android:name="com.example.helloworld.MainActivity"  
  8.         android:label="@string/app_name" >  
  9.         <intent-filter>  
  10.             <action android:name="android.intent.action.MAIN" />  
  11.   
  12.             <category android:name="android.intent.category.LAUNCHER" />  
  13.         intent-filter>  
  14.     activity>  
  15. application>  

可以看到我们在创建工程时,已经默认给我们的整个应用添加了一个主题

  1. android:theme="@style/AppTheme"  
打开我们资源文件res/values/下面的styles.xml文件,可以看到在样式文件中有一个名字为AppTheme的样式,如下:

  1. <resources>  
  2.   
  3.       
  4.     <style name="AppTheme" parent="AppBaseTheme">  
  5.           
  6.     style>  
  7.   
  8. resources>  
我们可以看到,这个AppTheme的样式继承自上面的AppBaseTheme。而AppBaseTheme又继承自系统的一个样式Theme.Light,打开Android系统源代码找到Theme.xml文件中的Theme.Light如下:

  1.     
  2.       <item name="textAppearance">@android:style/TextAppearanceitem>  
  3.       <item name="textAppearanceInverse">@android:style/TextAppearance.Inverseitem>  
  4.   
  5.       <item name="textColorPrimary">@android:color/primary_text_darkitem>  
  6.       <item name="textColorSecondary">@android:color/secondary_text_darkitem>  
  7.       <item name="textColorTertiary">@android:color/tertiary_text_darkitem>  
  8.       <item name="textColorPrimaryInverse">@android:color/primary_text_lightitem>  
  9.       <item name="textColorSecondaryInverse">@android:color/secondary_text_lightitem>  
  10.       <item name="textColorTertiaryInverse">@android:color/tertiary_text_lightitem>  
  11.       <item name="textColorPrimaryDisableOnly">@android:color/primary_text_dark_disable_onlyitem>  
  12.       <item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_light_disable_onlyitem>  
  13.       <item name="textColorPrimaryNoDisable">@android:color/primary_text_dark_nodisableitem>  
  14.       <item name="textColorSecondaryNoDisable">@android:color/secondary_text_dark_nodisableitem>  
  15.       <item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_light_nodisableitem>  
  16.       <item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_light_nodisableitem>  
  17.       <item name="textColorHint">@android:color/hint_foreground_darkitem>  
  18.       <item name="textColorHintInverse">@android:color/hint_foreground_lightitem>  
  19.       <item name="textColorSearchUrl">@android:color/search_url_textitem>  
  20.   
  21.       <item name="textAppearanceLarge">@android:style/TextAppearance.Largeitem>  
  22.       <item name="textAppearanceMedium">@android:style/TextAppearance.Mediumitem>  
  23.       <item name="textAppearanceSmall">@android:style/TextAppearance.Smallitem>  
  24.       <item name="textAppearanceLargeInverse">@android:style/TextAppearance.Large.Inverseitem>  
  25.       <item name="textAppearanceMediumInverse">@android:style/TextAppearance.Medium.Inverseitem>  
  26.       <item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverseitem>  
  27.       <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.SearchResult.Titleitem>  
  28.       <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.SearchResult.Subtitleitem>  
  29.         
  30.       <item name="textAppearanceButton">@android:style/TextAppearance.Widget.Buttonitem>  
  31.         
  32.       <item name="candidatesTextStyleSpans">@android:string/candidates_styleitem>  
  33.         
  34.       <item name="textCheckMark">@android:drawable/indicator_check_mark_darkitem>  
  35.       <item name="textCheckMarkInverse">@android:drawable/indicator_check_mark_lightitem>  
  36.   
  37.         
  38.       <item name="buttonStyle">@android:style/Widget.Buttonitem>  
  39.   
  40.       <item name="buttonStyleSmall">@android:style/Widget.Button.Smallitem>  
  41.       <item name="buttonStyleInset">@android:style/Widget.Button.Insetitem>  
  42.   
  43.       <item name="buttonStyleToggle">@android:style/Widget.Button.Toggleitem>  
  44.   
  45.         
  46.       <item name="listPreferredItemHeight">64dipitem>  
  47.         
  48.       <item name="searchResultListItemHeight">58dipitem>  
  49.       <item name="listDivider">@drawable/divider_horizontal_darkitem>  
  50.       <item name="listSeparatorTextViewStyle">@android:style/Widget.TextView.ListSeparatoritem>     
  51.         
  52. <item name="listChoiceIndicatorSingle">@android:drawable/btn_radioitem>  
  53.     <item name="listChoiceIndicatorMultiple">@android:drawable/btn_checkitem>      
  54.   
  55.       <item name="expandableListPreferredItemPaddingLeft">40dipitem>  
  56.       <item name="expandableListPreferredChildPaddingLeft">  
  57.               ?android:attr/expandableListPreferredItemPaddingLeftitem>  
  58.   
  59.       <item name="expandableListPreferredItemIndicatorLeft">3dipitem>  
  60.       <item name="expandableListPreferredItemIndicatorRight">33dipitem>  
  61.       <item name="expandableListPreferredChildIndicatorLeft">  
  62.               ?android:attr/expandableListPreferredItemIndicatorLeftitem>  
  63.       <item name="expandableListPreferredChildIndicatorRight">  
  64.               ?android:attr/expandableListPreferredItemIndicatorRightitem>  
  65.   
  66.         
  67.       <item name="galleryItemBackground">@android:drawable/gallery_item_backgrounditem>  
  68.         
  69.         
  70.       <item name="windowBackground">@android:drawable/screen_background_darkitem>  
  71.       <item name="windowFrame">@nullitem>  
  72.       <item name="windowNoTitle">falseitem>  
  73.       <item name="windowFullscreen">falseitem>  
  74.       <item name="windowIsFloating">falseitem>  
  75.       <item name="windowContentOverlay">@android:drawable/title_bar_shadowitem>  
  76.       <item name="windowShowWallpaper">falseitem>  
  77.       <item name="windowTitleStyle">@android:style/WindowTitleitem>  
  78.       <item name="windowTitleSize">25dipitem>  
  79.       <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackgrounditem>  
  80.       <item name="android:windowAnimationStyle">@android:style/Animation.Activityitem>  
  81.       <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecifieditem>  
  82.   
  83.         
  84.       <item name="alertDialogStyle">@android:style/AlertDialogitem>  
  85.         
  86.         
  87.       <item name="panelBackground">@android:drawable/menu_backgrounditem>  
  88.       <item name="panelFullBackground">@android:drawable/menu_background_fill_parent_widthitem>  
  89.         
  90.       <item name="panelColorBackground">#000item>  
  91.       <item name="panelColorForeground">?android:attr/textColorPrimaryitem>  
  92.       <item name="panelTextAppearance">?android:attr/textAppearanceitem>  
  93.   
  94.         
  95.       <item name="scrollbarFadeDuration">250item>  
  96.       <item name="scrollbarDefaultDelayBeforeFade">300item>   
  97.       <item name="scrollbarSize">10dipitem>  
  98.       <item name="scrollbarThumbHorizontal">@android:drawable/scrollbar_handle_horizontalitem>  
  99.       <item name="scrollbarThumbVertical">@android:drawable/scrollbar_handle_verticalitem>  
  100.       <item name="scrollbarTrackHorizontal">@nullitem>  
  101.       <item name="scrollbarTrackVertical">@nullitem>  
  102.   
  103.         
  104.       <item name="textSelectHandleLeft">@android:drawable/text_select_handle_leftitem>  
  105.       <item name="textSelectHandleRight">@android:drawable/text_select_handle_rightitem>  
  106.       <item name="textSelectHandle">@android:drawable/text_select_handle_middleitem>  
  107.       <item name="textSelectHandleWindowStyle">@android:style/Widget.TextSelectHandleitem>  
  108.   
  109.         
  110.       <item name="absListViewStyle">@android:style/Widget.AbsListViewitem>  
  111.       <item name="autoCompleteTextViewStyle">@android:style/Widget.AutoCompleteTextViewitem>          
  112.       <item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBoxitem>  
  113.       <item name="dropDownListViewStyle">@android:style/Widget.ListView.DropDownitem>  
  114.       <item name="editTextStyle">@android:style/Widget.EditTextitem>  
  115.       <item name="expandableListViewStyle">@android:style/Widget.ExpandableListViewitem>  
  116.       <item name="expandableListViewWhiteStyle">@android:style/Widget.ExpandableListView.Whiteitem>  
  117.       <item name="galleryStyle">@android:style/Widget.Galleryitem>  
  118.       <item name="gestureOverlayViewStyle">@android:style/Widget.GestureOverlayViewitem>  
  119.       <item name="gridViewStyle">@android:style/Widget.GridViewitem>  
  120.       <item name="imageButtonStyle">@android:style/Widget.ImageButtonitem>  
  121.       <item name="imageWellStyle">@android:style/Widget.ImageWellitem>  
  122.       <item name="listViewStyle">@android:style/Widget.ListViewitem>  
  123.       <item name="listViewWhiteStyle">@android:style/Widget.ListView.Whiteitem>  
  124.       <item name="popupWindowStyle">@android:style/Widget.PopupWindowitem>  
  125.       <item name="progressBarStyle">@android:style/Widget.ProgressBaritem>  
  126.       <item name="progressBarStyleHorizontal">@android:style/Widget.ProgressBar.Horizontalitem>  
  127.       <item name="progressBarStyleSmall">@android:style/Widget.ProgressBar.Smallitem>  
  128.       <item name="progressBarStyleSmallTitle">@android:style/Widget.ProgressBar.Small.Titleitem>  
  129.       <item name="progressBarStyleLarge">@android:style/Widget.ProgressBar.Largeitem>  
  130.       <item name="progressBarStyleInverse">@android:style/Widget.ProgressBar.Inverseitem>  
  131. <item name="progressBarStyleSmallInverse">@android:style/Widget.ProgressBar.Small.Inverseitem>  
  132.    <item name="progressBarStyleLargeInverse">@android:style/Widget.ProgressBar.Large.Inverseitem>   
  133.       <item name="seekBarStyle">@android:style/Widget.SeekBaritem>  
  134.       <item name="ratingBarStyle">@android:style/Widget.RatingBaritem>  
  135.       <item name="ratingBarStyleIndicator">@android:style/Widget.RatingBar.Indicatoritem>  
  136.       <item name="ratingBarStyleSmall">@android:style/Widget.RatingBar.Smallitem>  
  137.       <item name="radioButtonStyle">@android:style/Widget.CompoundButton.RadioButtonitem>  
  138.       <item name="scrollViewStyle">@android:style/Widget.ScrollViewitem>  
  139.       <item name="horizontalScrollViewStyle">@android:style/Widget.HorizontalScrollViewitem>  
  140.       <item name="spinnerStyle">@android:style/Widget.Spinneritem>  
  141.       <item name="starStyle">@android:style/Widget.CompoundButton.Staritem>  
  142.       <item name="tabWidgetStyle">@android:style/Widget.TabWidgetitem>  
  143.       <item name="textViewStyle">@android:style/Widget.TextViewitem>  
  144.       <item name="webTextViewStyle">@android:style/Widget.WebTextViewitem>  
  145.       <item name="webViewStyle">@android:style/Widget.WebViewitem>  
  146.       <item name="dropDownItemStyle">@android:style/Widget.DropDownItemitem>  
  147.       <item name="spinnerDropDownItemStyle">@android:style/Widget.DropDownItem.Spinneritem>  
  148.       <item name="spinnerItemStyle">@android:style/Widget.TextView.SpinnerItemitem>  
  149.       <item name="dropDownHintAppearance">@android:style/TextAppearance.Widget.DropDownHintitem>  
  150.       <item name="keyboardViewStyle">@android:style/Widget.KeyboardViewitem>  
  151.       <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.QuickContactBadge.WindowSmallitem>  
  152.       <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.QuickContactBadge.WindowMediumitem>  
  153.       <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.QuickContactBadge.WindowLargeitem>  
  154.       <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.QuickContactBadgeSmall.WindowSmallitem>  
  155.       <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.QuickContactBadgeSmall.WindowMediumitem>  
  156.       <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.QuickContactBadgeSmall.WindowLargeitem>  
  157.         
  158.         
  159.       <item name="preferenceScreenStyle">@android:style/Preference.PreferenceScreenitem>  
  160.       <item name="preferenceCategoryStyle">@android:style/Preference.Categoryitem>  
  161.       <item name="preferenceStyle">@android:style/Preferenceitem>  
  162.       <item name="preferenceInformationStyle">@android:style/Preference.Informationitem>  
  163.       <item name="checkBoxPreferenceStyle">@android:style/Preference.CheckBoxPreferenceitem>  
  164.       <item name="yesNoPreferenceStyle">@android:style/Preference.DialogPreference.YesNoPreferenceitem>  
  165.       <item name="dialogPreferenceStyle">@android:style/Preference.DialogPreferenceitem>  
  166.       <item name="editTextPreferenceStyle">@android:style/Preference.DialogPreference.EditTextPreferenceitem>  
  167.       <item name="ringtonePreferenceStyle">@android:style/Preference.RingtonePreferenceitem>  
  168.       <item name="preferenceLayoutChild">@android:layout/preference_childitem>  
  169.   
  170.         
  171.       <item name="searchWidgetCorpusItemBackground">@android:color/search_widget_corpus_item_backgrounditem>  
  172.   style>  
  173.     

我们可以看到里面定义了关于我们整个应用中文字的样式,按钮的样式,列表的样式,画廊的样式,窗体的样式,对话框的样式等。这个样式是系统的默认样式,也是最符合HOLO的样式。Theme中定义的是最基本的主题样式,Theme的样式扩展样式有我们上面的Theme.Light还有Theme.NoTitleBar、Theme.NoTitleBar.Fullscreen、Theme.Light.NoTitleBar、Theme.Light.NoTitleBar.Fullscreen、Theme.Black、......

三、自定义主题

有了上面对Theme的了解之后,下面我们通过改变标题栏来自定义主题样式,首先继承Theme,标题栏是与窗体样式(Window attributes)相关的样式,我们在Theme.xml中找到这几句代码.

  1.   
  2.        <item name="windowBackground">@android:drawable/screen_background_darkitem>  
  3.        <item name="windowFrame">@nullitem>  
  4.        <item name="windowNoTitle">falseitem>  
  5.        <item name="windowFullscreen">falseitem>  
  6.        <item name="windowIsFloating">falseitem>  
  7.        <item name="windowContentOverlay">@android:drawable/title_bar_shadowitem>  
  8.        <item name="windowShowWallpaper">falseitem>  
  9.        <item name="windowTitleStyle">@android:style/WindowTitleitem>  
  10.        <item name="windowTitleSize">25dipitem>  
  11.        <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackgrounditem>  
  12.        <item name="android:windowAnimationStyle">@android:style/Animation.Activityitem>  
  13.        <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecifieditem>  

将上面主题中Title的大小和背景覆盖

  1.   
  2. <style name="myTheme" parent="android:Theme">  
  3.     <item name="android:windowTitleBackgroundStyle">@style/myThemeStyleitem>  
  4.     <item name="android:windowTitleSize">50dipitem>  
  5. style>  
  6.   
  7.   
  8. <style name="myThemeStyle">  
  9.     <item name="android:background">#FF0000item>  
  10. style>  

默认主题样式

android 自定义主题样式_第1张图片

自定义主题样式

android 自定义主题样式_第2张图片

如果有的朋友还想改变整个应用的字体、或者风格都可以通过继承Theme覆盖原有的样式来达到自定义的效果。


你可能感兴趣的:(android 自定义主题样式)