Android主题和样式
1、位置
在Android的frameworks/base/core/res/res/values目錄下有一下幾個文件:
| 1 2 3 4 | themes.xml themes_device_defaults.xml styles.xml styles_device_defaults.xml |
分別定義了各種系統(tǒng)Theme,Style。
2、主題Theme
主要關(guān)注themes.xml,themes_device_defaults.xml兩個文件。
themes.xml定義了android低版本的theme和Holo theme,themes_device_defaults.xml定義了DeviceDefault主題(繼承自Holo主題),實(shí)際上就是在Holo主題上定制主題(For廠商)。
系統(tǒng)如何去選擇默認(rèn)的主題呢?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /**frameworks/base/core/java/android/content/res/Resources.java*/ /** @hide */ public?static?int?selectDefaultTheme(int?curTheme,?int?targetSdkVersion) { ????return?selectSystemTheme(curTheme, targetSdkVersion, ????????????com.android.internal.R.style.Theme, ????????????com.android.internal.R.style.Theme_Holo, ????????????com.android.internal.R.style.Theme_DeviceDefault); }??? /** @hide */ public?static?int?selectSystemTheme(int?curTheme,?int?targetSdkVersion, ????????int?orig,?int?holo,?int?deviceDefault) { ????if?(curTheme !=?0) { ????????return?curTheme; ????}??? ????if?(targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) { ????????// < 11 ????????return?orig; ????}??? ????if?(targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { ?????????// < 14 ?????????return?holo; ????}??? ????return?deviceDefault; } |
當(dāng)<11時,使用以前低版本主題;當(dāng)>=11&&<14,使用Holo主題;>14的時候,使用DeviceDefault主題。
方便理解,下面把目前所有的版本號列出來,也順便溫習(xí)一下android的歷史:
3、系統(tǒng)主題Theme列表
系統(tǒng)默認(rèn)大的主題是三種:Theme,Theme.Holo,Theme.DeviceDefault, 但是實(shí)際上在此基礎(chǔ)系統(tǒng)還定義了大量的派生主題,最典型的是對應(yīng)的Light主題。
除此之外,還有很多,在此一一列出,打字太痛苦了,我貼出截圖:
了解android系統(tǒng)定義的主題之后,我們就可以根據(jù)實(shí)際情況在自己的應(yīng)用中使用這些主題,但是如果想修改主題的某些內(nèi)容,需要進(jìn)一步深入。
4、詳解每個主題中定義item分類
一個完整的主題應(yīng)該定義哪些內(nèi)容呢,以Theme為例,如下:
1)顏色
| 1 2 3 4 5 6 7 8 9 10 | <item name="colorForeground">@android:color/bright_foreground_dark</item> <item name="colorForegroundInverse">@android:color/bright_foreground_dark_inverse</item> <item name="colorBackground">@android:color/background_dark</item> <item name="colorBackgroundCacheHint">?android:attr/colorBackground</item> <item name="colorPressedHighlight">@color/legacy_pressed_highlight</item> <item name="colorLongPressedHighlight">@color/legacy_long_pressed_highlight</item> <item name="colorFocusedHighlight">@color/legacy_selected_highlight</item> <item name="colorMultiSelectHighlight">@color/legacy_selected_highlight</item> <item name="colorActivatedHighlight">@color/legacy_selected_highlight</item> |
2)字體
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <!-- Text styles --> <item name="textAppearance">@android:style/TextAppearance</item> <item name="textAppearanceInverse">@android:style/TextAppearance.Inverse</item> <item name="textColorPrimary">@android:color/primary_text_dark</item> <item name="textColorSecondary">@android:color/secondary_text_dark</item> <item name="textColorTertiary">@android:color/tertiary_text_dark</item> <item name="textColorPrimaryInverse">@android:color/primary_text_light</item> <item name="textColorSecondaryInverse">@android:color/secondary_text_light</item> <item name="textColorTertiaryInverse">@android:color/tertiary_text_light</item> <item name="textColorPrimaryDisableOnly">@android:color/primary_text_dark_disable_only</item> <item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_light_disable_only</item> <item name="textColorPrimaryNoDisable">@android:color/primary_text_dark_nodisable</item> <item name="textColorSecondaryNoDisable">@android:color/secondary_text_dark_nodisable</item> <item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_light_nodisable</item> <item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_light_nodisable</item> <item name="textColorHint">@android:color/hint_foreground_dark</item> <item name="textColorHintInverse">@android:color/hint_foreground_light</item> <item name="textColorSearchUrl">@android:color/search_url_text</item> <item name="textColorHighlight">@android:color/highlighted_text_dark</item> <item name="textColorHighlightInverse">@android:color/highlighted_text_light</item> <item name="textColorLink">@android:color/link_text_dark</item> <item name="textColorLinkInverse">@android:color/link_text_light</item> <item name="textColorAlertDialogListItem">@android:color/primary_text_light_disable_only</item> <item name="textAppearanceLarge">@android:style/TextAppearance.Large</item> <item name="textAppearanceMedium">@android:style/TextAppearance.Medium</item> <item name="textAppearanceSmall">@android:style/TextAppearance.Small</item> <item name="textAppearanceLargeInverse">@android:style/TextAppearance.Large.Inverse</item> <item name="textAppearanceMediumInverse">@android:style/TextAppearance.Medium.Inverse</item> <item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverse</item> <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.SearchResult.Title</item> <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.SearchResult.Subtitle</item> <item name="textAppearanceEasyCorrectSuggestion">@android:style/TextAppearance.EasyCorrectSuggestion</item> <item name="textAppearanceMisspelledSuggestion">@android:style/TextAppearance.MisspelledSuggestion</item> <item name="textAppearanceAutoCorrectionSuggestion">@android:style/TextAppearance.AutoCorrectionSuggestion</item> <item name="textAppearanceButton">@android:style/TextAppearance.Widget.Button</item> <item name="editTextColor">@android:color/primary_text_light</item> <item name="editTextBackground">@android:drawable/edit_text</item> <item name="candidatesTextStyleSpans">@android:string/candidates_style</item> <item name="textCheckMark">@android:drawable/indicator_check_mark_dark</item> <item name="textCheckMarkInverse">@android:drawable/indicator_check_mark_light</item> <item name="textAppearanceLargePopupMenu">@android:style/TextAppearance.Widget.PopupMenu.Large</item> <item name="textAppearanceSmallPopupMenu">@android:style/TextAppearance.Widget.PopupMenu.Small</item> |
3)按鈕
| 1 2 3 4 5 6 7 8 9 10 11 | <!-- Button styles --> <item name="buttonStyle">@android:style/Widget.Button</item> <item name="buttonStyleSmall">@android:style/Widget.Button.Small</item> <item name="buttonStyleInset">@android:style/Widget.Button.Inset</item> <item name="buttonStyleToggle">@android:style/Widget.Button.Toggle</item> <item name="selectableItemBackground">@android:drawable/item_background</item> <item name="borderlessButtonStyle">?android:attr/buttonStyle</item> <item name="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_dark</item> |
4)List
| 1 2 3 4 5 6 7 8 9 10 11 | <!-- List attributes --> <item name="listPreferredItemHeight">64dip</item> <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeight</item> <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeight</item> <item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeight</item> <item name="textAppearanceListItem">?android:attr/textAppearanceLarge</item> <item name="textAppearanceListItemSmall">?android:attr/textAppearanceLarge</item> <item name="listPreferredItemPaddingLeft">6dip</item> <item name="listPreferredItemPaddingRight">6dip</item> <item name="listPreferredItemPaddingStart">6dip</item> <item name="listPreferredItemPaddingEnd">6dip</item> |
5)Window
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!-- Window attributes --> <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="windowOverscan">false</item> <item name="windowIsFloating">false</item> <item name="windowContentOverlay">@null</item> <item name="windowShowWallpaper">false</item> <item name="windowTitleStyle">@android:style/WindowTitle</item> <item name="windowTitleSize">25dip</item> <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item> <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item> <item name="windowActionBar">false</item> <item name="windowActionModeOverlay">false</item> <item name="windowCloseOnTouchOutside">false</item> <item name="windowTranslucentStatus">false</item> <item name="windowTranslucentNavigation">false</item> |
6)Dialog
| 1 2 3 4 5 | <!-- Dialog attributes --> <item name="dialogTheme">@android:style/Theme.Dialog</item> <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons</item> <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title</item> <item name="dialogTitleDecorLayout">@layout/dialog_title</item> |
7)AlertDialog
| 1 2 3 4 5 | <!-- AlertDialog attributes --> <item name="alertDialogTheme">@android:style/Theme.Dialog.Alert</item> <item name="alertDialogStyle">@android:style/AlertDialog</item> <item name="alertDialogCenterButtons">true</item> <item name="alertDialogIcon">@android:drawable/ic_dialog_alert</item> |
8)Panel
| 1 2 3 4 5 6 7 8 9 10 | <!-- Panel attributes --> <item name="panelBackground">@android:drawable/menu_background</item> <item name="panelFullBackground">@android:drawable/menu_background_fill_parent_width</item> <!-- These three attributes?do?not seems to be used by the framework. Declared?public?though --> <item name="panelColorBackground">#000</item> <item name="panelColorForeground">?android:attr/textColorPrimary</item> <item name="panelTextAppearance">?android:attr/textAppearance</item> <item name="panelMenuIsCompact">false</item> <item name="panelMenuListWidth">296dip</item> |
9)滾動條(Scrollbar)
| 1 2 3 4 5 6 7 8 | <!-- Scrollbar attributes --> <item name="scrollbarFadeDuration">250</item> <item name="scrollbarDefaultDelayBeforeFade">300</item> <item name="scrollbarSize">10dip</item> <item name="scrollbarThumbHorizontal">@android:drawable/scrollbar_handle_horizontal</item> <item name="scrollbarThumbVertical">@android:drawable/scrollbar_handle_vertical</item> <item name="scrollbarTrackHorizontal">@null</item> <item name="scrollbarTrackVertical">@null</item> |
10)文字選中(Text selection)
| 1 2 3 4 5 6 7 8 9 10 11 12 | <!-- Text selection handle attributes --> <item name="textSelectHandleLeft">@android:drawable/text_select_handle_left</item> <item name="textSelectHandleRight">@android:drawable/text_select_handle_right</item> <item name="textSelectHandle">@android:drawable/text_select_handle_middle</item> <item name="textSelectHandleWindowStyle">@android:style/Widget.TextSelectHandle</item> <item name="textEditPasteWindowLayout">@android:layout/text_edit_paste_window</item> <item name="textEditNoPasteWindowLayout">@android:layout/text_edit_no_paste_window</item> <item name="textEditSidePasteWindowLayout">@android:layout/text_edit_side_paste_window</item> <item name="textEditSideNoPasteWindowLayout">@android:layout/text_edit_side_no_paste_window</item> <item name="textSuggestionsWindowStyle">@android:style/Widget.TextSuggestionsPopupWindow</item> <item name="textEditSuggestionItemLayout">@android:layout/text_edit_suggestion_item</item> <item name="textCursorDrawable">@null</item> 原文鏈接 http://www.cnblogs.com/qianxudetianxia/p/3725466.html |
總結(jié)
以上是生活随笔為你收集整理的Android主题和样式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享一个超好看回忆相册(代码自取)
- 下一篇: Ubuntu系统从机械硬盘迁移到SSD