1概述
Theme是针对窗体设计的,用以改变窗体样式;Style是针对窗体元素的,用以改变指定控件或layout的样式。
Android系统的themes.xml和style.xml文件位于
frameworks/base/core/res/res/values
中。里面涉及到很多.9.png文件,路径位于
frameworks/base/core/res/res/drawable-hdpi
2 系统主题分类
themes.xml //API10以前
themes_hole.xml //APi 11
themes_device_defaults.xml //API14
themes_material.xml //API21
themes_micro.xml //Android Wear
themes_leanback.xml //not know
兼容包
AppCompat
2.1 androidManifest.xml中设置
<application
android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme.NoActionBar">
<activity
android:name=".MainActivity"
android:theme="@style/Base.TextAppearance.AppCompat">
2.2 java设置
setTheme(theme); //这里必须在super方法之前调用,不然不能生效!
super.onCeate(saveInstance)
2.3 常用theme列表
android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式
•android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
•android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
•android:theme="@android:style/Theme.Light" 背景为白色
•android:theme="@android:style/Theme.Light.NoTitleBar" 白色背景并无标题栏
•android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
•android:theme="@android:style/Theme.Black" 背景黑色
•android:theme="@android:style/Theme.Black.NoTitleBar" 黑色背景并无标题栏
•android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
•android:theme="@android:style/Theme.Wallpaper" 用系统桌面为应用程序背景
•android:theme="@android:style/Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
•android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
•android:theme="@android:style/Translucent" 半透明效果
•android:theme="@android:style/Theme.Translucent.NoTitleBar" 半透明并无标题栏
•android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 半透明效果,无标题栏,全屏
•android:theme="@android:style/Theme.Panel"
2.4 ProgressBar
style="?android:attr/progressBarStyleHorizontal"
style="?android:attr/progressBarStyleLarge"
style="?android:attr/progressBarStyleSmall"
style="?android:attr/progressBarStyleSmallTitle"
2.5 CheckBox样式
2.6 类似标题栏效果的TextView
style="?android:attr/listSeparatorTextViewStyle"
2.7 其它有用的样式
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingRight="?android:attr/scrollbarSize"
style="?android:attr/windowTitleBackgroundStyle"
style="?android:attr/windowTitleStyle"
android:layout_height="?android:attr/windowTitleSize"
android:background="?android:attr/windowBackground"
3 字体
3.1 Android平台定义了三种字体大小:
"?android:attr/textAppearanceLarge"
"?android:attr/textAppearanceMedium"
"?android:attr/textAppearanceSmall"
3.2 Android字体颜色:
android:textColor="?android:attr/textColorPrimary"
android:textColor="?android:attr/textColorSecondary"
android:textColor="?android:attr/textColorTertiary"
android:textColor="?android:attr/textColorPrimaryInverse"
android:textColor="?android:attr/textColorSecondaryInverse"
4 分隔符
4.1 横向:
<View
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider" />
4.2 纵向:
<View android:layout_width="1dip"
android:layout_height="fill_parent"
android:background="?android:attr/listDivider" />
4.3 space
space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域,它通过android:layout_row及android:layout_column指定了其起始位置。
5 修改Activity的标题栏样式
5.1 在styles.xml中增加一个自定义style
例如
<resources>
<style name="AutoWindowTitleBackground">
<item name="android:background">#778899</item>
</style>
<style name="autoWindowTitlebar" parent="android:Theme">
<item name="android:windowTitleSize">32dp</item>
<item name="android:windowTitleBackgroundStyle">@style/AutoWindowTitleBackground</item>
</style>
</resources>
5.2 再修改AndroidManifest.xml文件,找到要自定义标题栏的Activity,添加上android:theme值。
比如:
5.3 去掉所有Activity界面的标题栏
修改AndroidManifest.xml
在application 标签中添加
android:theme=”@android:style/Theme.NoTitleBar”
6 Material Theme
6.1 material主题
@android:style/Theme.Material //黑色背景
@android:style/Theme.Material.Light //白色背景
@android:style/Theme.Material.Light.DarkActionBar //白色背景黑色titlebar
6.2 自定义颜色基调
自定义主题的基础色调如下:
<resources>
<!-- inherit from the material theme -->
<style name="AppTheme" parent="android:Theme.Material">
<!-- Main theme colors -->
<!-- your app's branding color (for the app bar) -->
<item name="android:colorPrimary">@color/primary</item>
<!-- darker variant of colorPrimary(for status bar,contextual app bars) -->
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<!-- theme UI controls like checkboxes and text fields -->
<item name="android:colorAccent">@color/accent</item>
</style>
</resources>
6.3 自定义颜色
colorPrimary ActionBar导航栏颜色;ToolBar使用toolBar的属性background设置导航栏背景颜色
colorPrimaryDark 系统状态栏颜色
textColorPrimary 导航栏字体颜色
windowBackground 主界面背景色
navigationBarColor 底部系统导航栏颜色(api21加才有)
colorControlHighlight 波纹颜色(Ripple)
colorAccent 控件的选中颜色(如checkbox/radiobutton等选中状态)
如图所示
6.4 Elevation
android 5.0增加了z轴,其中使用
android:elevation
来设置阴影的大小和绘制顺序。transitionZ属性可以实现临时变更elevation的动画,一般用于触摸反馈。