原文地址 http://www.cnblogs.com/Dentist/p/4369816.html

Theme是一套UI控件和Activity的样式。可以给Application 和 activity 设置主题。来设置显示界面的样式。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.jude.test.education" >    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"            <style name="AppTheme" parent="Theme.AppCompat">    style>        <style name="AppTheme2" parent="Theme.AppCompat.Light">    style>        <style name="AppTheme3" parent="Theme.AppCompat.NoActionBar">    style>        <style name="AppTheme4" parent="Theme.AppCompat.Light.NoActionBar">    style>

如果使用 android.support.v7.app.ActionBarActivity 就必须要用兼容主题Theme.AppCompat。

ActionBarActivity 的存在就是为了兼容低API。让他们用上高API的东西。比如Toolbar。

 

如果使用普通的Activity就可以用Holo主题。

Holo主题是Android4.0开始谷歌极力推行的Android Design的主题。

    <style name="AppTheme5" parent="android:Theme.Holo">    style>

不过Android5.0谷歌又推出了Material Design来取代Android Design。

如果你的APP从5.0起配的话就可以直接使用Material主题

    <style name="AppTheme5" parent="android:Theme.Material">    style>

 

在代码中设置Activity的主题

setTheme(R.style.Theme_AppCompat);

Activity 是 ContextThemeWrapper的子类。而ContextThemeWrapper一个很重要的 属性就是Theme。

实例化一个View必须要 new View(Context context) 。因为View需要把Attributes交给Context的Theme来确定一堆属性(在一个叫TypedArray的容器里)。

比如当你没有定义TextView的字体颜色时,他该显示什么颜色。他要去问Theme。

下面是Theme的官方解释加上我险过四级的英语水平。

/**     * This class holds the current attribute values for a particular theme.    这个类持有特定主题的当前attribute     * In other words, a Theme is a set of values for resource attributes;    换句话说是资源attribute属性的集合     * these are used in conjunction with {@link TypedArray}    这些属性和TypedArray结合使用     * to resolve the final value for an attribute.    来得出attribute的最终值     *      * 

The Theme's attributes come into play in two ways: (1) a styled    这个主题的属性通过两种方式执行: * attribute can explicit reference a value in the theme through the    (1)一个设置过的attribute可以通过"?themeAttribute"语法明确引用一个值   * "?themeAttribute" syntax; (2) if no value has been defined for a    (2)如果在一个特定的 attribute 有一个没有被定义的值,在最后我们会尝试 * particular styled attribute, as a last resort we will try to find that    在主题中找到他那个值 * attribute's value in the Theme. * *

You will normally use the {@link #obtainStyledAttributes} APIs to * retrieve XML attributes with style and theme information applied. */ public final class Theme { /* *太长不写 */ }

  

常用的theme项:

    <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">                <item name="colorPrimary">@color/theme_primaryitem>                <item name="colorPrimaryDark">@color/theme_primaryitem>                <item name="colorAccent">@color/theme_accentitem>                <item name="drawerArrowStyle">@style/DrawerArrowStyleitem>    style>    <style name="AppTheme" parent="BaseTheme">                <item name="android:windowIsTranslucent">trueitem>                <item name="android:windowBackground">@android:color/transparentitem>    style>    <style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">                <item name="android:background">@drawable/bg_launchitem>    style>    <style name="MainTheme" parent="BaseTheme">                <item name="android:windowAnimationStyle">@android:style/Animation.Translucentitem>    style>    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">                <item name="color">@android:color/whiteitem>    style>

 所有theme项:

     <item name="windowActionBar">trueitem>        <item name="windowActionBarOverlay">falseitem>                <item name="isLightTheme">falseitem>        <item name="selectableItemBackground">@drawable/abc_item_background_holo_darkitem>        <item name="selectableItemBackgroundBorderless">?attr/selectableItemBackgrounditem>        <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alphaitem>        <item name="dividerVertical">@drawable/abc_list_divider_mtrl_alphaitem>        <item name="dividerHorizontal">@drawable/abc_list_divider_mtrl_alphaitem>                <item name="actionBarTabStyle">@style/Widget.AppCompat.ActionBar.TabViewitem>        <item name="actionBarTabBarStyle">@style/Widget.AppCompat.ActionBar.TabBaritem>        <item name="actionBarTabTextStyle">@style/Widget.AppCompat.ActionBar.TabTextitem>        <item name="actionButtonStyle">@style/Widget.AppCompat.ActionButtonitem>        <item name="actionOverflowButtonStyle">@style/Widget.AppCompat.ActionButton.Overflowitem>        <item name="actionOverflowMenuStyle">@style/Widget.AppCompat.PopupMenu.Overflowitem>        <item name="actionBarStyle">@style/Widget.AppCompat.ActionBar.Soliditem>        <item name="actionBarSplitStyle">?attr/actionBarStyleitem>        <item name="actionBarWidgetTheme">@nullitem>        <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.ActionBaritem>        <item name="actionBarSize">@dimen/abc_action_bar_default_height_materialitem>        <item name="actionBarDivider">?attr/dividerVerticalitem>        <item name="actionBarItemBackground">?attr/selectableItemBackgroundBorderlessitem>        <item name="actionMenuTextAppearance">@style/TextAppearance.AppCompat.Widget.ActionBar.Menuitem>        <item name="actionMenuTextColor">?android:attr/textColorPrimaryDisableOnlyitem>                <item name="actionDropDownStyle">@style/Widget.AppCompat.Spinner.DropDown.ActionBaritem>                <item name="actionModeStyle">@style/Widget.AppCompat.ActionModeitem>        <item name="actionModeBackground">@drawable/abc_cab_background_top_materialitem>        <item name="actionModeSplitBackground">?attr/colorPrimaryDarkitem>        <item name="actionModeCloseDrawable">@drawable/abc_ic_ab_back_mtrl_am_alphaitem>        <item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionButton.CloseModeitem>        <item name="actionModeCutDrawable">@drawable/abc_ic_menu_cut_mtrl_alphaitem>        <item name="actionModeCopyDrawable">@drawable/abc_ic_menu_copy_mtrl_am_alphaitem>        <item name="actionModePasteDrawable">@drawable/abc_ic_menu_paste_mtrl_am_alphaitem>        <item name="actionModeSelectAllDrawable">@drawable/abc_ic_menu_selectall_mtrl_alphaitem>        <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_mtrl_alphaitem>                <item name="panelMenuListWidth">@dimen/abc_panel_menu_list_widthitem>        <item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenuitem>        <item name="panelBackground">@drawable/abc_menu_hardkey_panel_mtrl_multitem>        <item name="android:panelBackground">@android:color/transparentitem>        <item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_darkitem>                <item name="textAppearanceListItem">@style/TextAppearance.AppCompat.Subheaditem>        <item name="textAppearanceListItemSmall">@style/TextAppearance.AppCompat.Subheaditem>        <item name="listPreferredItemHeight">64dpitem>        <item name="listPreferredItemHeightSmall">48dpitem>        <item name="listPreferredItemHeightLarge">80dpitem>        <item name="listPreferredItemPaddingLeft">16dipitem>        <item name="listPreferredItemPaddingRight">16dipitem>                <item name="spinnerDropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinneritem>        <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmallitem>                <item name="popupMenuStyle">@style/Widget.AppCompat.PopupMenuitem>        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Widget.PopupMenu.Largeitem>        <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Widget.PopupMenu.Smallitem>        <item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindowitem>        <item name="dropDownListViewStyle">@style/Widget.AppCompat.ListView.DropDownitem>                <item name="searchViewStyle">@style/Widget.AppCompat.SearchViewitem>        <item name="android:dropDownItemStyle">@style/Widget.AppCompat.DropDownItem.Spinneritem>        <item name="textColorSearchUrl">@color/abc_search_url_textitem>        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.AppCompat.SearchResult.Titleitem>        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.AppCompat.SearchResult.Subtitleitem>                <item name="activityChooserViewStyle">@style/Widget.AppCompat.ActivityChooserViewitem>                <item name="toolbarStyle">@style/Widget.AppCompat.Toolbaritem>        <item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigationitem>        <item name="android:editTextStyle">@style/Widget.AppCompat.EditTextitem>        <item name="editTextBackground">@drawable/abc_edit_text_materialitem>        <item name="editTextColor">?android:attr/textColorPrimaryitem>        <item name="android:autoCompleteTextViewStyle">@style/Widget.AppCompat.AutoCompleteTextViewitem>                <item name="colorPrimaryDark">@color/primary_dark_material_darkitem>        <item name="colorPrimary">@color/primary_material_darkitem>        <item name="colorAccent">@color/accent_material_darkitem>        <item name="colorControlNormal">?android:attr/textColorSecondaryitem>        <item name="colorControlActivated">?attr/colorAccentitem>        <item name="colorControlHighlight">@color/ripple_material_darkitem>        <item name="colorButtonNormal">@color/button_material_darkitem>        <item name="colorSwitchThumbNormal">@color/switch_thumb_normal_material_darkitem>        <item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggleitem>        <item name="switchStyle">@style/Widget.AppCompat.CompoundButton.Switchitem>        <item name="android:ratingBarStyle">@style/Widget.AppCompat.RatingBaritem>                <item name="android:buttonStyle">@style/Widget.AppCompat.Buttonitem>        <item name="android:buttonStyleSmall">@style/Widget.AppCompat.Button.Smallitem>        <item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Buttonitem>

 继承一个Theme。重载上面的属性可以更方便的控制整个APP的风格。

 

下面说说style。

theme是全局的设计风格。style是局部的设计风格。

看我另一篇介绍ToolBar的帖子。里面说到了。系统是Light主题。而ToolBar需要Dark主题。可以给ToolBar单独设置一个 

app:theme="@style/Theme.AppCompat"

而只有toolbar是特例。其他view并不能使用这个。
所以谷歌推出了 ThemeOverlay 来解决这个问题。详情自行:https://chris.banes.me/2014/11/12/theme-vs-style/
<LinearLayout    android:theme="@android:style/ThemeOverlay.Material.Dark">            

这样就可以给View设置单独主题了。

 


转载于:https://www.cnblogs.com/Jude95/p/4369816.html

更多相关文章

  1. android 中的 edittext属性大全
  2. Android学习笔记:androidmanifest.xml 高级属性
  3. 关于android:configChanges的属性
  4. LinearLayout && RelativeLayout 常用属性
  5. Android中自定义属性(attrs.xml,TypedArray的使用)
  6. android 属性系统 及其 补充
  7. Android GridView 特殊属性

随机推荐

  1. Android-x86虚拟机
  2. android 对电话的处理
  3. Andorid利用sserver/runtime实现java执行
  4. 高德地图Android版SDK的应用(定位,添加自
  5. 42.Android LocationManager
  6. Android TextView 个别文字字体颜色格式
  7. Android之使用MediaMetadataRetriever类
  8. Android SDK Manager Extras中没有 Intel
  9. Android SQLite 数据库、表的增、删、改
  10. 关于Android 游戏开发中 OnTouchEvent()