Android上的Style分为了两个方面:
1,Theme是针对窗体级别的,改变窗体样式;
2,Style是针对窗体元素级别的,改变指定控件或者Layout的样式。
Android系统的themes.xml和style.xml(位于系统源代码frameworks\base\core\res\res\values\)包含了很多系统定义好的style,建议在里面挑个合适的,然后再继承修改。
风格是一个包含一种或者多种格式化属性的集合,你可以将其用为一个单位用在布局XML单个元素当中。比如,你可以定义一种风格来定义文本的字号大小和颜色,然后将其用在View元素的一个特定的实例。
主题是一个包含一种或者多种格式化属性的集合,你可以将其为一个单位用在应用中所有的Activity当中或者应用中的某个Activity当 中。比如,你可以定义一个主题,它为window frame和panel 的前景和背景定义了一组颜色,并为菜单定义可文字的大小和颜色属性,你可以将这个主题应用在你程序当中所有的Activity里。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
setTheme(android.R.style.Theme_Light);
setContentView(R.layout.linear_layout_3);
}
下面的前三个之外直接复制就会出错。@是说明系统已经定义过的,@android:style/ 是必须带上的。
?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" 平板风格显示
===================================================================================================
用到了Android的主题和风格,感觉很多地方需要总结和记录下来。其实主题和风格是有很大的作用的,特别是界面要求比较高的客户端。
Style:是一个包含一种或者多种格式化属性的集合,我们可以将其用为一个单位用在布局XML单个元素当中。比如,我们可以定义一种风格来定义文本的字号大小和颜色,然后将其用在View元素的一个特定的实例。
如何定义style?
style也属于resource,所以要在resource下定义,就像定义string,color一样
定义style,需要指定name,style通常包含一个或多个item,每个item的name是android view的属性的名字,值则是对应相关属性的值
可以给style指定parent,从而可以继承和覆盖parent style的属性,parent取值是另外一个style,如果是继承自自己定义的style,只需要在命名style时增加前缀,这个前缀就是即将继承的style的名字
例如CodeFont是一个自己定义的style,那么下面的style,CodeFont.Red,则继承了CodeFont,只是文本的颜色修改成了红色
也可以继承平台的style,可继承的样式请参照绍docs/guide/topics/ui/themes.html#PlatformStyles
在layout.xml中的应用:
其实style就像是一组属性的组合, 可以看做当在view中引用style时,是顺序执行style中的item里面的每个属性,对view进行设定而已。因为可能有多个view都是需要设置相同的属性,。所以把这些view的属性单独写出,提高重用性。
theme:就像风格一样,主题依然在
下面代码显示在AndroidManifest.xml中如何为应用设置上面定义的主题:
除了可以在AndroidManifest.xml中设置主题,同样也可以在代码中设置主题,如下:
setTheme(R.style.theme1);
注意:我们用了@符号和?符号来应用资源。@符号表明了我们应用的资源是前边定义过的(或者在前一个项目
中或者在Android 框架中)。问号?表明了我们引用的资源的值在当前的主题当中定义过。
style和theme的区别:
尽管在定义上,样式和主题基本相同,但是它们使用的地方不同。样式用在单独的View,如:EditText、TextView等;主题通过AndroidManifest.xml中的
另外android系统也定义了一些主题,例如:
==================================================================================================
通过使用style和theme可以将
android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#00FF00" android:typeface="monospace" android:text="@string/hello"/> 改写为: style="@style/CodeFont" android:text="@string/hello" /> style应用于某一固定的View,Theme应用于整个的Activity或者Application Style需定义在/res/values下的xml文件中。例如: 如果要继承android内置的style需要定义parent属性,如上面所示。如果需要继承自定义的style则不需要parent属性。在name中表明即可。如下,该style继承了自定义的name为CodeFont的style,并重写了一些属性: style="@style/CodeFont" android:text="@string/hello" /> 如果想使activity具有Dialog的风格的话,可以这样: 想让背景透明的话,可以: 如果想定制系统自带的theme的话,可以: 上面的例子中引用了另一个color资源,因为属性android:colorBackground只支持引用。 根据平台不同自动切换theme,比如定义了theme: 如果想让该theme在version11中变换style,可以在res/velues-11下定义xml文件,包含如下内容:
Android自带了大量的style和theme供选择使用,也可以个性化定制 二、定义Style
2.1 style的继承
三、在UI上应用style和theme
3.1 在view上应用style
3.2 在activity或application上应用theme
3.3 根据平台版本自动选择theme
四、使用自带的style和theme