Android Theme and style
2015-11-15 20:49
267 查看
每家公司的app都有自己的统一的特色,这就涉及到theme和style,当然他们只不是仅仅为了这个特点存在,想activity的进入动画等都能通过theme和style实现,简单并且减少了代码数,熟练使用theme and style也能做出很炫的效果。
![](http://img.blog.csdn.net/20151115165146279)
这就是源码中theme和style所有的样式了,这里不介绍如何使用,只介绍其中属性的意义,能实现什么样的效果,方便在你自己的app中实现自定义!
以上这段代码来自源码中的themes.xml,都是window的属性
windowBackground 背景
windowBackgroundFallback
windowClipToOutline
windowFrame Dialog 是否有边框
windowNoTitle 是否有标题
windowFullscreen 是否为全屏
windowOverscan 是否要求窗体铺满整屏幕
windowIsFloating 是否浮在下层之上
windowContentOverlay 设置覆盖内容背景
windowShowWallpaper 是否显示壁纸
windowTitleStyle 标题栏Style
windowTitleSize 窗体文字大小
windowTitleBackgroundStyle 标题栏背景style
windowAnimationStyle 切换时的动画样式
windowSoftInputMode 在使用输入法时窗体的适配
windowActionBar 是否打开ActionBar
windowActionModeOverlay 是否覆盖action
windowCloseOnTouchOutside 是否再点击外部可关闭
windowTranslucentStatus 是否半透明状态
windowTranslucentNavigation 是否使用半透明导航
windowDrawsSystemBarBackgrounds 是否绘制系统导航栏背景
statusBarColor 状态栏颜色
navigationBarColor 导航栏颜色
windowActionBarFullscreenDecorLayout 全屏时的布局
windowContentTransitions 内容是否转换
windowActivityTransitions 活动时候转换
上面内容相信大家都用过,这里简单说一下windowAnimationStyle,主要负责activity的切换时的动画,这里有两种形式,一种是给window设置动画,一种是设置activity的动画
根据需要设置,这里说明一下设置activity的动画
activityOpenEnterAnimation
activityOpenExitAnimation
activityCloseEnterAnimation
activityCloseExitAnimation
这里以Activity A跳转到Activity B为例,来说明一下以上四条,第一条A跳转到B,B进入时的动画;第二条A跳转到B,A消失的动画;第三条B返回到A时,进入A的动画;第四条B返回到A,B消失的动画,这里需要说一下,如果你设定的动画没有按照你想想中那样执行,这里你需要查一下是不是两个都设定动画了,这也是我写这篇文章的原因。
当然theme.xml还有很多代码,各种各样的主题都在这里面,你不妨用到的时候再来看看,很多都是上面所介绍的那些属性,这里只看我们平时用的比较多的。
这里就是我们经常用到的button,统一的定义格式,代码简单,直接使用style属性拿来应用即可,这里不详述
熟练使用theme 和style 会给你带来很大的好处,存在即为合理,熟练使用手里的工具提高效率,写出高质量的代码!
what is theme ?
主题是对整个应用中所有的Activity都起作用,或者对指定的Activity起作用 定义格式通常是改变窗口的外观格式,标题,边框等 。what is style ?
为每个View重复地指定字体,颜色等属性,无疑会增加大量的代码,而且不利于我们后期项目的维护,所以就引入样式(Style) 学过web的都知道,我们可以通过css的选择器对html中的元素进行设置;而在UI组件中,我们可以通过style属性来指定 样式。这就是源码中theme和style所有的样式了,这里不介绍如何使用,只介绍其中属性的意义,能实现什么样的效果,方便在你自己的app中实现自定义!
window属性
<!-- Window attributes --> <item name="windowBackground">@drawable/screen_background_selector_dark</item> <item name="windowBackgroundFallback">?attr/colorBackground</item> <item name="windowClipToOutline">false</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">@style/WindowTitle</item> <item name="windowTitleSize">25dip</item> <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground</item> <item name="windowAnimationStyle">@style/Animation.Activity</item> <item name="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> <item name="windowDrawsSystemBarBackgrounds">false</item> <item name="statusBarColor">@color/black</item> <item name="navigationBarColor">@color/black</item> <item name="windowActionBarFullscreenDecorLayout">@layout/screen_action_bar</item> <item name="windowContentTransitions">false</item> <item name="windowActivityTransitions">false</item>
以上这段代码来自源码中的themes.xml,都是window的属性
windowBackground 背景
windowBackgroundFallback
windowClipToOutline
windowFrame Dialog 是否有边框
windowNoTitle 是否有标题
windowFullscreen 是否为全屏
windowOverscan 是否要求窗体铺满整屏幕
windowIsFloating 是否浮在下层之上
windowContentOverlay 设置覆盖内容背景
windowShowWallpaper 是否显示壁纸
windowTitleStyle 标题栏Style
windowTitleSize 窗体文字大小
windowTitleBackgroundStyle 标题栏背景style
windowAnimationStyle 切换时的动画样式
windowSoftInputMode 在使用输入法时窗体的适配
windowActionBar 是否打开ActionBar
windowActionModeOverlay 是否覆盖action
windowCloseOnTouchOutside 是否再点击外部可关闭
windowTranslucentStatus 是否半透明状态
windowTranslucentNavigation 是否使用半透明导航
windowDrawsSystemBarBackgrounds 是否绘制系统导航栏背景
statusBarColor 状态栏颜色
navigationBarColor 导航栏颜色
windowActionBarFullscreenDecorLayout 全屏时的布局
windowContentTransitions 内容是否转换
windowActivityTransitions 活动时候转换
上面内容相信大家都用过,这里简单说一下windowAnimationStyle,主要负责activity的切换时的动画,这里有两种形式,一种是给window设置动画,一种是设置activity的动画
<item name="@android:windowEnterAnimation">@anim/dialog_enter</item> <item name="@android:windowExitAnimation">@anim/dialog_exit</item>
<item name="activityOpenEnterAnimation">@anim/activity_open_enter</item> <item name="activityOpenExitAnimation">@anim/activity_open_exit</item> <item name="activityCloseEnterAnimation">@anim/activity_close_enter</item> <item name="activityCloseExitAnimation">@anim/activity_close_exit</item>
根据需要设置,这里说明一下设置activity的动画
activityOpenEnterAnimation
activityOpenExitAnimation
activityCloseEnterAnimation
activityCloseExitAnimation
这里以Activity A跳转到Activity B为例,来说明一下以上四条,第一条A跳转到B,B进入时的动画;第二条A跳转到B,A消失的动画;第三条B返回到A时,进入A的动画;第四条B返回到A,B消失的动画,这里需要说一下,如果你设定的动画没有按照你想想中那样执行,这里你需要查一下是不是两个都设定动画了,这也是我写这篇文章的原因。
当然theme.xml还有很多代码,各种各样的主题都在这里面,你不妨用到的时候再来看看,很多都是上面所介绍的那些属性,这里只看我们平时用的比较多的。
Style使用
style的使用相对就很简单了,可以实现代码整洁,减少很多不必要的东西<style name="Widget.Button"> <item name="background">@drawable/btn_default</item> <item name="focusable">true</item> <item name="clickable">true</item> <item name="textAppearance">?attr/textAppearanceSmallInverse</item> <item name="textColor">@color/primary_text_light</item> <item name="gravity">center_vertical|center_horizontal</item> </style>
这里就是我们经常用到的button,统一的定义格式,代码简单,直接使用style属性拿来应用即可,这里不详述
熟练使用theme 和style 会给你带来很大的好处,存在即为合理,熟练使用手里的工具提高效率,写出高质量的代码!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories