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

安卓(android)的样式(style)和主题(theme)

2012-11-14 12:12 477 查看
样式是一套指定View或Window的外观和格式的属性集合。样式指定的是属性的集合,如高度、字体、字体颜色、背景等。Android里的样式推荐定义在xml文件里。

主题也是一种样式,只不过它是应用在整个Activity或application,而不只是View或Window。

定义自己的样式

样式保存为一个xml文件,保存在项目的res/values目录下,文件名是任意的,但必须以.xml为扩展名。

样式定义的例子如下,样式名为CodeFont,拥有自定义的属性(如layout_width、layout_height、layout_height、typeface):

<?xml version="1.0" encoding="utf-8"?>

<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:layout_height">#00FF00</item>

<item name="android:typeface">monospace</item>

</style>

</resources>

当需要应用这个样式的时候,只需应用style的name属性,如:@style/CodeFont。

样式的继承

方式一:style里的parent属性指定了继承的样式的属性,可以改写继承的样式属性。如上CodeFont继承了android:style/TextAppearance.Medium的样式属性。

方式二:如果不想使用parent属性而又想继承其他的样式属性,可以把style的name写为CodeFont.Red。如下:

<style name="CodeFont.Red">

<item name="android:textColor">#FF0000</item>

</style>

该样式(CodeFont.Red)继承了CodeFont,且颜色为红色(#FF0000),通过@style/CodeFont.Red引用该样式。

CodeFont.Red还可以继续被继承,如下:

<style name="CodeFont.Red.Big">

<item name="android:textSize">30sp</item>

</style>

CodeFont.Red.Big继承了CodeFont.Red和CodeFont的样式属性,依此类推,可以不断的继承下去,就像Java的继承一样。

注意:对于android内置的样式属性只能通过parent继承(即方式一),不能通过name属性(即方式二)。

样式属性

对于自己要定义的样式,item里的样式可以到要应用到的View的类里面查看可以应用哪些属性。如定义一个样式给TextView,可以到TextView类里面查看TextView支持哪些属性。对于不支持的属性不会起作用,也不会报错。

有一些样式属性只有在它被用作主题(Theme)是才起作用,这些样式属性应用到整个窗口而不应用到任何的一个View,比如,有的样式属性可以隐藏application标题,隐藏status bar,或改变窗口的背景。这些属性不属于任何的View。可以到android.R.attr里去查看以window开头的属性,如windowNoTitle 和windowBackground,这些属性只有当样式作为主题时才有效果。

应用Styles和Themes到UI

1、对于单独的View,在style属性里引用样式,只应用到该View。

2、对于整个Activity或整个application,通过android:theme属性引用样式,对于该Activity或application下的所有元素,如果该元素支持该属性,就会有效果,否者会忽略该属性。

应用样式到View

<TextView style="@style/CodeFont" android:text="@string/hello" />

把样式作为主题应用到Activity或application

<application android:theme="@style/CustomTheme">

<activity android:theme="@android:style/Theme.Dialog">

android提供的样式可以在R.styleable.Theme里找到一些。

R.style提供了所有的可用样式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: