您的位置:首页 > 移动开发 > Android开发

Android Theme and style

2015-11-15 20:49 267 查看
每家公司的app都有自己的统一的特色,这就涉及到theme和style,当然他们只不是仅仅为了这个特点存在,想activity的进入动画等都能通过theme和style实现,简单并且减少了代码数,熟练使用theme and 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 会给你带来很大的好处,存在即为合理,熟练使用手里的工具提高效率,写出高质量的代码!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android theme style