android自定义主题样式
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中添加了一个属性:
- android:theme="@android:style/Theme.NoTitleBar"
可能有的朋友就会迷惑了,为什么添加了这个属性就可以了。这一篇文章将让我们一起翻开Android系统源代码来揭开困扰大家的关于主题使用以及自定义的谜团。
一、样式(Style)与主题(Theme)
在Android的应用的资源文件中有一个style.xml文件,这个文件是干什么用的呢?我们有时候经常需要对某个类型的组件指定大致相似的格式,比如字体、颜色、背景色等,如果我们每次都为某个View组件去重复指定这些属性,这无疑会产生大量的工作,而且还不利于后期的代码修改和维护。而Style就是一个样式的格式,这个格式可以被多个View组件所使用,也可以说是一个样式的集合类,被需要这一类样式集合的View组件所使用。例如我们前面写的QQ登录界面中的登录按钮,我们可以给定义一个样式
- <style name="buttonStyle">
- <item name="android:background">@drawable/login_button_noritem>
- <item name="android:textColor">@color/buttonTextColoritem>
- style>
在布局文件中引入样式
- <Button
- android:layout_width="270dip"
- android:layout_height="40dip"
- android:text="@string/login_button"
- style="@style/buttonStyle"
- />
(1)在AndroidMainfest.xml中为Activity或者application指定主题
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@android:style/Theme.NoTitleBar" >
- <activity
- android:name="com.example.myfirstapp.MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- intent-filter>
- activity>
- application>
上面AndroidMainfest.xml代码中给整个应用指定了一个主题,这个主题是没有标题栏的系统主题。
(2)在Activity创建时调用 setTheme方法(必须在setContentView前面调用)来给某个Activity添加主题。
二、剖析主题(Theme)资源
我们先来创建一个工程名字为helloworld,然后打开它的AndroiodMainfest.xml文件
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="com.example.helloworld.MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- intent-filter>
- activity>
- application>
可以看到我们在创建工程时,已经默认给我们的整个应用添加了一个主题
- android:theme="@style/AppTheme"
- <resources>
- <style name="AppTheme" parent="AppBaseTheme">
- style>
- resources>
- <item name="textAppearance">@android:style/TextAppearanceitem>
- <item name="textAppearanceInverse">@android:style/TextAppearance.Inverseitem>
- <item name="textColorPrimary">@android:color/primary_text_darkitem>
- <item name="textColorSecondary">@android:color/secondary_text_darkitem>
- <item name="textColorTertiary">@android:color/tertiary_text_darkitem>
- <item name="textColorPrimaryInverse">@android:color/primary_text_lightitem>
- <item name="textColorSecondaryInverse">@android:color/secondary_text_lightitem>
- <item name="textColorTertiaryInverse">@android:color/tertiary_text_lightitem>
- <item name="textColorPrimaryDisableOnly">@android:color/primary_text_dark_disable_onlyitem>
- <item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_light_disable_onlyitem>
- <item name="textColorPrimaryNoDisable">@android:color/primary_text_dark_nodisableitem>
- <item name="textColorSecondaryNoDisable">@android:color/secondary_text_dark_nodisableitem>
- <item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_light_nodisableitem>
- <item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_light_nodisableitem>
- <item name="textColorHint">@android:color/hint_foreground_darkitem>
- <item name="textColorHintInverse">@android:color/hint_foreground_lightitem>
- <item name="textColorSearchUrl">@android:color/search_url_textitem>
- <item name="textAppearanceLarge">@android:style/TextAppearance.Largeitem>
- <item name="textAppearanceMedium">@android:style/TextAppearance.Mediumitem>
- <item name="textAppearanceSmall">@android:style/TextAppearance.Smallitem>
- <item name="textAppearanceLargeInverse">@android:style/TextAppearance.Large.Inverseitem>
- <item name="textAppearanceMediumInverse">@android:style/TextAppearance.Medium.Inverseitem>
- <item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverseitem>
- <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.SearchResult.Titleitem>
- <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.SearchResult.Subtitleitem>
- <item name="textAppearanceButton">@android:style/TextAppearance.Widget.Buttonitem>
- <item name="candidatesTextStyleSpans">@android:string/candidates_styleitem>
- <item name="textCheckMark">@android:drawable/indicator_check_mark_darkitem>
- <item name="textCheckMarkInverse">@android:drawable/indicator_check_mark_lightitem>
- <item name="buttonStyle">@android:style/Widget.Buttonitem>
- <item name="buttonStyleSmall">@android:style/Widget.Button.Smallitem>
- <item name="buttonStyleInset">@android:style/Widget.Button.Insetitem>
- <item name="buttonStyleToggle">@android:style/Widget.Button.Toggleitem>
- <item name="listPreferredItemHeight">64dipitem>
- <item name="searchResultListItemHeight">58dipitem>
- <item name="listDivider">@drawable/divider_horizontal_darkitem>
- <item name="listSeparatorTextViewStyle">@android:style/Widget.TextView.ListSeparatoritem>
- <item name="listChoiceIndicatorSingle">@android:drawable/btn_radioitem>
- <item name="listChoiceIndicatorMultiple">@android:drawable/btn_checkitem>
- <item name="expandableListPreferredItemPaddingLeft">40dipitem>
- <item name="expandableListPreferredChildPaddingLeft">
- ?android:attr/expandableListPreferredItemPaddingLeftitem>
- <item name="expandableListPreferredItemIndicatorLeft">3dipitem>
- <item name="expandableListPreferredItemIndicatorRight">33dipitem>
- <item name="expandableListPreferredChildIndicatorLeft">
- ?android:attr/expandableListPreferredItemIndicatorLeftitem>
- <item name="expandableListPreferredChildIndicatorRight">
- ?android:attr/expandableListPreferredItemIndicatorRightitem>
- <item name="galleryItemBackground">@android:drawable/gallery_item_backgrounditem>
- <item name="windowBackground">@android:drawable/screen_background_darkitem>
- <item name="windowFrame">@nullitem>
- <item name="windowNoTitle">falseitem>
- <item name="windowFullscreen">falseitem>
- <item name="windowIsFloating">falseitem>
- <item name="windowContentOverlay">@android:drawable/title_bar_shadowitem>
- <item name="windowShowWallpaper">falseitem>
- <item name="windowTitleStyle">@android:style/WindowTitleitem>
- <item name="windowTitleSize">25dipitem>
- <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackgrounditem>
- <item name="android:windowAnimationStyle">@android:style/Animation.Activityitem>
- <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecifieditem>
- <item name="alertDialogStyle">@android:style/AlertDialogitem>
- <item name="panelBackground">@android:drawable/menu_backgrounditem>
- <item name="panelFullBackground">@android:drawable/menu_background_fill_parent_widthitem>
- <item name="panelColorBackground">#000item>
- <item name="panelColorForeground">?android:attr/textColorPrimaryitem>
- <item name="panelTextAppearance">?android:attr/textAppearanceitem>
- <item name="scrollbarFadeDuration">250item>
- <item name="scrollbarDefaultDelayBeforeFade">300item>
- <item name="scrollbarSize">10dipitem>
- <item name="scrollbarThumbHorizontal">@android:drawable/scrollbar_handle_horizontalitem>
- <item name="scrollbarThumbVertical">@android:drawable/scrollbar_handle_verticalitem>
- <item name="scrollbarTrackHorizontal">@nullitem>
- <item name="scrollbarTrackVertical">@nullitem>
- <item name="textSelectHandleLeft">@android:drawable/text_select_handle_leftitem>
- <item name="textSelectHandleRight">@android:drawable/text_select_handle_rightitem>
- <item name="textSelectHandle">@android:drawable/text_select_handle_middleitem>
- <item name="textSelectHandleWindowStyle">@android:style/Widget.TextSelectHandleitem>
- <item name="absListViewStyle">@android:style/Widget.AbsListViewitem>
- <item name="autoCompleteTextViewStyle">@android:style/Widget.AutoCompleteTextViewitem>
- <item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBoxitem>
- <item name="dropDownListViewStyle">@android:style/Widget.ListView.DropDownitem>
- <item name="editTextStyle">@android:style/Widget.EditTextitem>
- <item name="expandableListViewStyle">@android:style/Widget.ExpandableListViewitem>
- <item name="expandableListViewWhiteStyle">@android:style/Widget.ExpandableListView.Whiteitem>
- <item name="galleryStyle">@android:style/Widget.Galleryitem>
- <item name="gestureOverlayViewStyle">@android:style/Widget.GestureOverlayViewitem>
- <item name="gridViewStyle">@android:style/Widget.GridViewitem>
- <item name="imageButtonStyle">@android:style/Widget.ImageButtonitem>
- <item name="imageWellStyle">@android:style/Widget.ImageWellitem>
- <item name="listViewStyle">@android:style/Widget.ListViewitem>
- <item name="listViewWhiteStyle">@android:style/Widget.ListView.Whiteitem>
- <item name="popupWindowStyle">@android:style/Widget.PopupWindowitem>
- <item name="progressBarStyle">@android:style/Widget.ProgressBaritem>
- <item name="progressBarStyleHorizontal">@android:style/Widget.ProgressBar.Horizontalitem>
- <item name="progressBarStyleSmall">@android:style/Widget.ProgressBar.Smallitem>
- <item name="progressBarStyleSmallTitle">@android:style/Widget.ProgressBar.Small.Titleitem>
- <item name="progressBarStyleLarge">@android:style/Widget.ProgressBar.Largeitem>
- <item name="progressBarStyleInverse">@android:style/Widget.ProgressBar.Inverseitem>
- <item name="progressBarStyleSmallInverse">@android:style/Widget.ProgressBar.Small.Inverseitem>
- <item name="progressBarStyleLargeInverse">@android:style/Widget.ProgressBar.Large.Inverseitem>
- <item name="seekBarStyle">@android:style/Widget.SeekBaritem>
- <item name="ratingBarStyle">@android:style/Widget.RatingBaritem>
- <item name="ratingBarStyleIndicator">@android:style/Widget.RatingBar.Indicatoritem>
- <item name="ratingBarStyleSmall">@android:style/Widget.RatingBar.Smallitem>
- <item name="radioButtonStyle">@android:style/Widget.CompoundButton.RadioButtonitem>
- <item name="scrollViewStyle">@android:style/Widget.ScrollViewitem>
- <item name="horizontalScrollViewStyle">@android:style/Widget.HorizontalScrollViewitem>
- <item name="spinnerStyle">@android:style/Widget.Spinneritem>
- <item name="starStyle">@android:style/Widget.CompoundButton.Staritem>
- <item name="tabWidgetStyle">@android:style/Widget.TabWidgetitem>
- <item name="textViewStyle">@android:style/Widget.TextViewitem>
- <item name="webTextViewStyle">@android:style/Widget.WebTextViewitem>
- <item name="webViewStyle">@android:style/Widget.WebViewitem>
- <item name="dropDownItemStyle">@android:style/Widget.DropDownItemitem>
- <item name="spinnerDropDownItemStyle">@android:style/Widget.DropDownItem.Spinneritem>
- <item name="spinnerItemStyle">@android:style/Widget.TextView.SpinnerItemitem>
- <item name="dropDownHintAppearance">@android:style/TextAppearance.Widget.DropDownHintitem>
- <item name="keyboardViewStyle">@android:style/Widget.KeyboardViewitem>
- <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.QuickContactBadge.WindowSmallitem>
- <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.QuickContactBadge.WindowMediumitem>
- <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.QuickContactBadge.WindowLargeitem>
- <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.QuickContactBadgeSmall.WindowSmallitem>
- <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.QuickContactBadgeSmall.WindowMediumitem>
- <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.QuickContactBadgeSmall.WindowLargeitem>
- <item name="preferenceScreenStyle">@android:style/Preference.PreferenceScreenitem>
- <item name="preferenceCategoryStyle">@android:style/Preference.Categoryitem>
- <item name="preferenceStyle">@android:style/Preferenceitem>
- <item name="preferenceInformationStyle">@android:style/Preference.Informationitem>
- <item name="checkBoxPreferenceStyle">@android:style/Preference.CheckBoxPreferenceitem>
- <item name="yesNoPreferenceStyle">@android:style/Preference.DialogPreference.YesNoPreferenceitem>
- <item name="dialogPreferenceStyle">@android:style/Preference.DialogPreferenceitem>
- <item name="editTextPreferenceStyle">@android:style/Preference.DialogPreference.EditTextPreferenceitem>
- <item name="ringtonePreferenceStyle">@android:style/Preference.RingtonePreferenceitem>
- <item name="preferenceLayoutChild">@android:layout/preference_childitem>
- <item name="searchWidgetCorpusItemBackground">@android:color/search_widget_corpus_item_backgrounditem>
- style>
我们可以看到里面定义了关于我们整个应用中文字的样式,按钮的样式,列表的样式,画廊的样式,窗体的样式,对话框的样式等。这个样式是系统的默认样式,也是最符合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中找到这几句代码.
- <item name="windowBackground">@android:drawable/screen_background_darkitem>
- <item name="windowFrame">@nullitem>
- <item name="windowNoTitle">falseitem>
- <item name="windowFullscreen">falseitem>
- <item name="windowIsFloating">falseitem>
- <item name="windowContentOverlay">@android:drawable/title_bar_shadowitem>
- <item name="windowShowWallpaper">falseitem>
- <item name="windowTitleStyle">@android:style/WindowTitleitem>
- <item name="windowTitleSize">25dipitem>
- <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackgrounditem>
- <item name="android:windowAnimationStyle">@android:style/Animation.Activityitem>
- <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecifieditem>
将上面主题中Title的大小和背景覆盖
- <style name="myTheme" parent="android:Theme">
- <item name="android:windowTitleBackgroundStyle">@style/myThemeStyleitem>
- <item name="android:windowTitleSize">50dipitem>
- style>
- <style name="myThemeStyle">
- <item name="android:background">#FF0000item>
- style>
默认主题样式
自定义主题样式
如果有的朋友还想改变整个应用的字体、或者风格都可以通过继承Theme覆盖原有的样式来达到自定义的效果。
更多相关文章
- Android应用开发——系统自带样式Android:theme
- Android系统自带样式
- Android之阴影制作(Shadow)
- Android自带的主题与样式
- Android(安卓)系统自带样式Android:theme
- android:style/Theme
- 【Android】自带Theme
- Android(安卓)系统自带样式Android:theme
- Android(安卓)系统自带样式Android:theme