样式是一套指定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提供了所有的可用样式。
安卓(android)的样式(style)和主题(theme)
最新推荐文章于 2023-05-08 15:45:46 发布