码迷,mamicode.com
首页 > 移动开发 > 详细

Android系统自带样式(android:theme)

时间:2016-04-25 22:30:56      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

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


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


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. <stylename"buttonStyle"> <itemname"android:background"></item> <itemname"android:textColor"></item> </style>  


在布局文件中引入样式

 

 

  1. <Button android:layout_width"270dip" android:layout_height"40dip" android:text"@string/login_button" style"@style/buttonStyle" />  

与样式非常相似,主题资源的xml文件通常也放在/res/values目录下,主题相当于整个应用或者某个Activity的样式,换句话说主题是针对窗体级别或整个应用程序的样式。与样式比较,样式是针对窗体内元素的样式。主题的设置有两种方式

 

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

 

  1. <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> <actionandroid:name"android.intent.action.MAIN"/> <categoryandroid:name"android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application>  


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

 

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

二、剖析主题(Theme)资源

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

 

  1. <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> <actionandroid:name"android.intent.action.MAIN"/> <categoryandroid:name"android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application>  


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

 

 

  1. android:theme"@style/AppTheme"  

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

 

 

  1. <resources> > <stylename"AppBaseTheme"parent"android:Theme.Light"> > </style> <!-- Application theme. --> <stylename"AppTheme"parent"AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> </resources>  

我们可以看到,这个AppTheme的样式继承自上面的AppBaseTheme。而AppBaseTheme又继承自系统的一个样式Theme.Light,打开Android系统源代码找到Theme.xml文件中的Theme.Light如下:

 

 

  1. > <stylename"Theme.Light"> <itemname"windowBackground"></item> <itemname"colorBackground"></item> <itemname"colorForeground"></item> <itemname"colorForegroundInverse"></item> <itemname"textColorPrimary"></item> <itemname"textColorSecondary"></item> <itemname"textColorTertiary"></item> <itemname"textColorPrimaryInverse"></item> <itemname"textColorSecondaryInverse"></item> <itemname"textColorTertiaryInverse"></item> <itemname"textColorPrimaryDisableOnly"></item> <itemname"textColorPrimaryInverseDisableOnly"></item> <itemname"textColorPrimaryNoDisable"></item> <itemname"textColorSecondaryNoDisable"></item> <itemname"textColorPrimaryInverseNoDisable"></item> <itemname"textColorSecondaryInverseNoDisable"></item> <itemname"textColorHint"></item> <itemname"textColorHintInverse"></item> <itemname"popupWindowStyle"></item> <itemname"textCheckMark"></item> <itemname"textCheckMarkInverse"></item> <itemname"gestureOverlayViewStyle"></item> <itemname"expandableListViewStyle"></item> <itemname"listViewStyle"></item> <itemname"listDivider"></item> <itemname"listSeparatorTextViewStyle"></item> <itemname"progressBarStyle"></item> <itemname"progressBarStyleSmall"></item> <itemname"progressBarStyleLarge"></item> <itemname"progressBarStyleInverse"></item> <itemname"progressBarStyleSmallInverse"></item> <itemname"progressBarStyleLargeInverse"></item> </style>  

样 式的继承有两种方式,一种是上面看到的parent="",还有一种就是用”."的方式,上面的Theme.Light继承自Theme。这两种继承有什 么区别呢?一个相当于咱们类之间的继承extend,另一个相当于内部类,也可以使用外部类的属性和方法。我们再来看看Theme.Light的父类 Theme的样式定义。

 

 

  1.   <stylename"Theme"> <itemname"colorForeground"></item> <itemname"colorForegroundInverse"></item> <itemname"colorBackground"></item> <itemname"colorBackgroundCacheHint"></item> <itemname"disabledAlpha"></item> <itemname"backgroundDimAmount"></item> <!-- Text styles --> <itemname"textAppearance"></item> <itemname"textAppearanceInverse"></item> <itemname"textColorPrimary"></item> <itemname"textColorSecondary"></item> <itemname"textColorTertiary"></item> <itemname"textColorPrimaryInverse"></item> <itemname"textColorSecondaryInverse"></item> <itemname"textColorTertiaryInverse"></item> <itemname"textColorPrimaryDisableOnly"></item> <itemname"textColorPrimaryInverseDisableOnly"></item> <itemname"textColorPrimaryNoDisable"></item> <itemname"textColorSecondaryNoDisable"></item> <itemname"textColorPrimaryInverseNoDisable"></item> <itemname"textColorSecondaryInverseNoDisable"></item> <itemname"textColorHint"></item> <itemname"textColorHintInverse"></item> <itemname"textColorSearchUrl"></item> <itemname"textAppearanceLarge"></item> <itemname"textAppearanceMedium"></item> <itemname"textAppearanceSmall"></item> <itemname"textAppearanceLargeInverse"></item> <itemname"textAppearanceMediumInverse"></item> <itemname"textAppearanceSmallInverse"></item> <itemname"textAppearanceSearchResultTitle"></item> <itemname"textAppearanceSearchResultSubtitle"></item> <itemname"textAppearanceButton"></item> <itemname"candidatesTextStyleSpans"></item> <itemname"textCheckMark"></item> <itemname"textCheckMarkInverse"></item> <!-- Button styles --> <itemname"buttonStyle"></item> <itemname"buttonStyleSmall"></item> <itemname"buttonStyleInset"></item> <itemname"buttonStyleToggle"></item> <!-- List attributes --> <itemname"listPreferredItemHeight"></item> <!-- @hide --> <itemname"searchResultListItemHeight"></item> <itemname"listDivider"></item> <itemname"listSeparatorTextViewStyle"></item> <itemname"listChoiceIndicatorSingle"></item> <itemname"listChoiceIndicatorMultiple"></item> <itemname"expandableListPreferredItemPaddingLeft"></item> <itemname"expandableListPreferredChildPaddingLeft"> </item> <itemname"expandableListPreferredItemIndicatorLeft"></item> <itemname"expandableListPreferredItemIndicatorRight"></item> <itemname"expandableListPreferredChildIndicatorLeft"> </item> <itemname"expandableListPreferredChildIndicatorRight"> </item> <!-- Gallery attributes --> <itemname"galleryItemBackground"></item> <!-- Window attributes --> <itemname"windowBackground"></item> <itemname"windowFrame"></item> <itemname"windowNoTitle"></item> <itemname"windowFullscreen"></item> <itemname"windowIsFloating"></item> <itemname"windowContentOverlay"></item> <itemname"windowShowWallpaper"></item> <itemname"windowTitleStyle"></item> <itemname"windowTitleSize"></item> <itemname"windowTitleBackgroundStyle"></item> <itemname"android:windowAnimationStyle"></item> <itemname"android:windowSoftInputMode"></item> <!-- Dialog attributes --> <itemname"alertDialogStyle"></item> <!-- Panel attributes --> <itemname"panelBackground"></item> <itemname"panelFullBackground"></item> <!-- These three attributes do not seems to be used by the framework. Declared public though --> <itemname"panelColorBackground"></item> <itemname"panelColorForeground"></item> <itemname"panelTextAppearance"></item> <!-- Scrollbar attributes --> <itemname"scrollbarFadeDuration"></item> <itemname"scrollbarDefaultDelayBeforeFade"></item> <itemname"scrollbarSize"></item> <itemname"scrollbarThumbHorizontal"></item> <itemname"scrollbarThumbVertical"></item> <itemname"scrollbarTrackHorizontal"></item> <itemname"scrollbarTrackVertical"></item> <!-- Text selection handle attributes --> <itemname"textSelectHandleLeft"></item> <itemname"textSelectHandleRight"></item> <itemname"textSelectHandle"></item> <itemname"textSelectHandleWindowStyle"></item> <!-- Widget styles --> <itemname"absListViewStyle"></item> <itemname"autoCompleteTextViewStyle"></item> <itemname"checkboxStyle"></item> <itemname"dropDownListViewStyle"></item> <itemname"editTextStyle"></item> <itemname"expandableListViewStyle"></item> <itemname"expandableListViewWhiteStyle"></item> <itemname"galleryStyle"></item> <itemname"gestureOverlayViewStyle"></item> <itemname"gridViewStyle"></item> <itemname"imageButtonStyle"></item> <itemname"imageWellStyle"></item> <itemname"listViewStyle"></item> <itemname"listViewWhiteStyle"></item> <itemname"popupWindowStyle"></item> <itemname"progressBarStyle"></item> <itemname"progressBarStyleHorizontal"></item> <itemname"progressBarStyleSmall"></item> <itemname"progressBarStyleSmallTitle"></item> <itemname"progressBarStyleLarge"></item> <itemname"progressBarStyleInverse"></item> <itemname"progressBarStyleSmallInverse"></item> <itemname"progressBarStyleLargeInverse"></item> <itemname"seekBarStyle"></item> <itemname"ratingBarStyle"></item> <itemname"ratingBarStyleIndicator"></item> <itemname"ratingBarStyleSmall"></item> <itemname"radioButtonStyle"></item> <itemname"scrollViewStyle"></item> <itemname"horizontalScrollViewStyle"></item> <itemname"spinnerStyle"></item> <itemname"starStyle"></item> <itemname"tabWidgetStyle"></item> <itemname"textViewStyle"></item> <itemname"webTextViewStyle"></item> <itemname"webViewStyle"></item> <itemname"dropDownItemStyle"></item> <itemname"spinnerDropDownItemStyle"></item> <itemname"spinnerItemStyle"></item> <itemname"dropDownHintAppearance"></item> <itemname"keyboardViewStyle"></item> <itemname"quickContactBadgeStyleWindowSmall"></item> <itemname"quickContactBadgeStyleWindowMedium"></item> <itemname"quickContactBadgeStyleWindowLarge"></item> <itemname"quickContactBadgeStyleSmallWindowSmall"></item> <itemname"quickContactBadgeStyleSmallWindowMedium"></item> <itemname"quickContactBadgeStyleSmallWindowLarge"></item> <!-- Preference styles --> <itemname"preferenceScreenStyle"></item> <itemname"preferenceCategoryStyle"></item> <itemname"preferenceStyle"></item> <itemname"preferenceInformationStyle"></item> <itemname"checkBoxPreferenceStyle"></item> <itemname"yesNoPreferenceStyle"></item> <itemname"dialogPreferenceStyle"></item> <itemname"editTextPreferenceStyle"></item> <itemname"ringtonePreferenceStyle"></item> <itemname"preferenceLayoutChild"></item> <!-- Search widget styles --> <itemname"searchWidgetCorpusItemBackground"></item> </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中找到这几句代码.

 

  1. <!-- Window attributes --> <itemname"windowBackground"></item> <itemname"windowFrame"></item> <itemname"windowNoTitle"></item> <itemname"windowFullscreen"></item> <itemname"windowIsFloating"></item> <itemname"windowContentOverlay"></item> <itemname"windowShowWallpaper"></item> <itemname"windowTitleStyle"></item> <itemname"windowTitleSize"></item> <itemname"windowTitleBackgroundStyle"></item> <itemname"android:windowAnimationStyle"></item> <itemname"android:windowSoftInputMode"></item>  

 

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

 

  1. <!-- 自定义的主题样式 --> <stylename"myTheme"parent"android:Theme"> <itemname"android:windowTitleBackgroundStyle"></item> <itemname"android:windowTitleSize"></item> </style> <!-- 主题中Title的背景样式 --> <stylename"myThemeStyle"> <itemname"android:background"></item> </style>  

 

默认主题样式

技术分享

自定义主题样式

技术分享

Android系统自带样式(android:theme)

标签:

原文地址:http://www.cnblogs.com/gaara-zhang/p/5432752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!