Android 的style和theme
2017-05-17 本文已影响829人
minminaya
例子
<resources>
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
<TextView
style="@style/CodeFont"
android:text="@string/hello" />
style作用
- 设计与内容分开
- 可继承
- 便于统一风格
书写方式
- 关于继承系统的书写
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
...
</style>
- 关于继承自定义的书写
<style name="CodeFont1" parent="CodeFont">
...
</style>
- 关于继承系统theme的书写
<style name="LightThemeSelector" parent="android:Theme.Holo.Light">
...
</style>
<style name="LightThemeSelector" parent="@android:style/Theme.Holo.Light">
...
</style>
- 关于继承自定义theme的书写
<style name="LightThemeSelector" parent="@style/Theme.AppCompat">
...
</style>
style与theme的区别
Theme是针对窗体级别的,改变窗体样式;
Style是针对窗体元素级别的,改变指定控件或者Layout的样式
简单的说就是Theme里面有包含了好多好多Style
android:theme与app:popupTheme
- android:theme设置是View和子View的主题(API20+)
- app:popupTheme设置的是该view节点下的view的theme(通俗的说就是类似css选择器的作用)
常用于Toolbar下
比如
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/AppTheme.AppBarOverlay"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
android:theme="@style/AppTheme.AppBarOverlay设置了Toolbar的主题
app:popupTheme="@style/AppTheme.PopupOverlay"设置了Toolbar节点下的view的主题
默认情况下我们使用theme为android:Theme.Holo.Light.DarkActionBar那么ActionBar文字是白的,ActionBar Overflow弹出的是黑底白字,如果需求是白底黑字那么只要设置toolbar的app:popupTheme="ThemeOverlay.AppCompat.Light"
常用的自带Theme
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” : 平板风格显示
常用的Theme的属性
名称 | 作用 |
---|---|
android:windowIsTranslucent | 设置透明属性(防止启动时候的闪屏) |
android:windowBackground | 设置背景图片 |
android:windowAnimationStyle | Activity进入退出动画 |
android:windowNoTitle | 不显示标题栏 |
android:textColor | 默认字体颜色 |
android:windowFullscreen | 是否全屏 |
android:windowIsFloating | 是否浮现在activity之上 |
android:backgroundDimEnabled | 背景是否模糊显示 |
常用的style元素属性
非官方附上一张官方的
官方