1.1,Theme主题作用范围
Theme主要是针对应用级别的或者说窗体级别,可以设置应用主题(应用换肤效果)和Activity的主题;主题是不能应用在某一个单独的View中;或者说Theme是用来设置应用全局主题风格的,对整个应用或某个Activity存在影响。
1.2,Theme主题的定义
在AS中res/values/style.xml中定义,例如新建项目AS自动创建的Theme,是系统提供;
Android系统提供的主题在:..\platforms\android-29\data\res\values
常见的系统主题:(来自https://blog.csdn.net/oudetu/article/details/78568436)
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="Translucent" 半透明
android:theme="Theme.Translucent.NoTitleBar" 半透明、无标题栏
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 半透明、无标题栏、全屏
android:theme=”Theme.Panel” 半透明,无标题,全屏
android:theme=”Theme.Light.Panel”平板风格显示
常见主题集合中的item属性(来自:https://www.jianshu.com/p/06a3bbb7ce79)
- @color/white
- @color/white
- @color/colorAccent
- #00000000
- true
- true
- true
- true
- true
- #E91E63
- true
- @drawable/ic_launcher_background
- false
- #B0C4DE
- #E6E6FA
- #1C71A9
- #FFFFFF
- #C1C1C1
- #FF7F50
- #FF00FF
- #FFD700
- #1C71A9
- singleTop
- landscape
1.3,Theme主题的使用
在AndroidManifest.xml为应用或者Activity设置theme,通过android:theme = "@style/theme主题名"来引入自己的主题
//自定义的Theme
在Java代码中设置theme,注意在Activity的onCreate方法中的setContentView(R.layout.activity_main)之前设置;
setTheme(R.style.AppTheme);
自定义属性 res/values/attrs.xml(通过:定义 赋值 使用)
1.4,系统Theme
系统Theme路径:SDK路径\platforms\android-26\data\res\values\themes.xml
2.1,style样式的使用范围
style样式是针对窗体元素级别的或者说View级别的,改变指定控件或者Layout的样式。
2.2,style作用
抽取一些共同的属性定义到style中,可以省略重复的属性代码。
2.3,定义
res/values/style.xml中新建
2.4,使用
在xml布局文件中
2.5,系统style
SDK路径\platforms\android-26\data\res\values\styles.xml
从Theme和style的作用范围可以看出他们的区别;如果一个应用使用了theme,同时应用下的view也使用了style,那么当theme与样式style发生冲突时,style有效,因为style的优先级高于theme;在R.attr定义中以window开头的一些属性只对theme有效。
两者的定义相同、继承方式也相同,都是在res/values/style.xml中定义;继承方式:. 继承(只能继承自定义)和parent继承
@符号:表明我们应用的资源是已经定义过并存在的,可以直接引用。
? 符号:表明我们引用的资源的值在当前的主题当中定义过。