API/Guides/User Interface/Styles and Themes 翻译
来源:互联网 发布:mac beta是什么意思 编辑:程序博客网 时间:2024/06/05 19:35
原文链接:
将它转化为这样:
所有关于该样式的属性都被从布局的XML里面移除,都定义在一个叫做CodeFont的样式里面。下面你将会看到如何定义该样式。
每一个<resources>里面的子元素,都会在编译时候被转化为一个应用的资源对象,当使用<style>中元素属性name时即可引用该对象。比如,在一个XML布局文件里面,使用@style/CodeFont(前面介绍过的)即可引用该样式。
当你想要继承你自定的样式时候,你不必 使用parent 属性,只需将被继承的样式名字作为新的样式名字的前缀,中间用"."隔开。比如,创建一个新的样式继承CodeFont,但是修改颜色为红色,你可以如下操作:
这个继承了
你可以为
现在,TextView将会采用CodeFont的样式属性。
如果你将该主题只是应用到某个Activity里面,只是添加
Styles and Themes
样式是指一系列关于设图和窗口的格式或者界面的属性组合。一种样式能够确定设图的高度,填充,字体颜色,字体大小,背景颜色等等。一种样式被定义在一个XML资源文件里面,该文件和指定布局的XML文件不同。
Android中的样式和web设计中的层叠样式理念一样-----他们允许你将设计和内容分开。
比如,通过使用一种样式,你可以在布局XML里面做这样操作:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#00FF00" android:typeface="monospace" android:text="@string/hello" />
将它转化为这样:
<TextView style="@style/CodeFont" android:text="@string/hello" />
一个主题是被用在整个Activity或者应用里面的样式,而不仅仅是单独的设图(如上面例子),当一个样式被应用做主题,在Activity和应用中所有视图都会采用该样式的属性。比如,你可以将CodeFonty样式用作一个Activity的主题,那么,所有在该Activity中的文本都会是绿色等宽字体。
定义样式
在你工程res/values/目录下面,创建一系列样式的XML文件。文件名是任意的,但必须,以".xml"作为扩展名,并且保存在res/values目录下面。
XML文件里的根节点必须是<resources>.
在你想创建的样式里面,添加一个<style>元素到该文件里面,并且携带一个可以唯一标识该样式的名字(这是必须的)。然后增加一个<item>元素,代表这个样式里面的每个属性,并且携带一个申明该属性的名字,和一个属性的值(这是必须的)。对于<item>里面的值,可以是一个关键字符串,一个十六进制的颜色值,一个指向另一个类型资源的引用,或者其他值。
下面就是一个简单的样式的例子:
<?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:textColor">#00FF00</item> <item name="android:typeface">monospace</item> </style></resources>
每一个<resources>里面的子元素,都会在编译时候被转化为一个应用的资源对象,当使用<style>中元素属性name时即可引用该对象。比如,在一个XML布局文件里面,使用@style/CodeFont(前面介绍过的)即可引用该样式。
在<style>元素内 parent属性是可选的,它指定了被继承的样式的ID. 如果需要,你也可以覆盖被继承样式中的属性。
记住,当一个样式被用在一个Activity或者一个应用时候,或者应用在单个视图上面,都是一样的。就像上面定义的那个样式一样,既可以用在单个试图上面,也可作为一个Activity或者应用的主题。后续会讨论一个样式怎么应用在单个试图,或者应用的主题。
继承
在<style>元素中parent 属性,指定了你要继承的样式。你可以继承已经存在的样式,只需定义你想修改或者添加的属性。你既可以继承自定义的样式,也可以继承系统默认创建的样式。比如。你可以继承Android平台默认的文本样式,然后修改它:
<style name="GreenText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00FF00</item> </style>
当你想要继承你自定的样式时候,你不必 使用parent 属性,只需将被继承的样式名字作为新的样式名字的前缀,中间用"."隔开。比如,创建一个新的样式继承CodeFont,但是修改颜色为红色,你可以如下操作:
<style name="CodeFont.Red"> <item name="android:textColor">#FF0000</item> </style>
注意,当<style>里面没有parent 属性标志时候,但是,name却以CodeFont样式名字作为开始,这个样式将继承所有CodeFont样式的属性。 你也可以@style/CodeFont.Red 创建一个新的样式,覆盖android:textColor 属性,使得文字颜色为红色。
你也可以通过链接名字这种方式实现多次继承。比如,你可以扩大
CodeFont.Red
:<style name="CodeFont.Red.Big"> <item name="android:textSize">30sp</item></style>
这个继承了
CodeFont
和 CodeFont.Red
样式 ,然后添加了android:textSize
属性。 注意: 这种通过链接名字的方式只允许集成你自定义的布局资源。不能在继承Android系统资源中使用,在该种情况下,必须使用 parent 属性。
样式属性
现在既然都已经掌握了如何定义一个样式,接下来需要掌握样式中哪些属性是能用的。你可能对于layout_width,textColor这些属性比较熟悉,当然,还有其他已经有使用过的属性。
寻找某个指定的视图所支持的属性,最好去它相关的类里面,里面罗列了该试图所支持的所有属性。比如,在TextView XML attributes 罗列了所有
TextView
元素(或它的子类)所支持的属性。其中一个属性 android:inputType
,你可以在一个<EditText> 里面放置该属性:<EditText android:inputType="number" ... />
你可以为
EditText
元素创建一个新的样式,包含这个属性:<style name="Numbers"> <item name="android:inputType">number</item> ...</style>
因此,你的XML布局文件可以实现该样式:
<EditText style="@style/Numbers" ... />
上面的例子看起来很高效,但是当你添加更多样式属性在不同的地方重用该样式,代价是很大的。
在
R.attr
引用中包含了所有有效的样式属性。记住,所有的视图对象都不会支持同样的属性,你可以到指定的视图里面看到相关支持的属性。但是,当你在一个试图里面使用它不支持的属性时候,试图会只引用它支持的属性,忽略不支持的部分。一些样式属性,虽然不被任何视图支持,却可以运用到主题中。这些属性被应用到整个窗口。比如,一些主题支持视图却不支持的样式属性:隐藏标题,隐藏状态栏,或者修改窗口背景。
在 R.attr中可以看到,那些以window开头的属性,都只是主题属性。比如,
windowNoTitle
和 windowBackground
只被应用到主题。下一节介绍如何将一样式应用到主题。 注意: 在每个
<item>
元素里面,属性名字都是以android:命名空间作为前缀,比如,<item name="android:inputType">
.在UI中使用样式和主题
设置样式有两种方式
(1)对于单个视图来说,在你的布局XML文件里面,添加
style
属性到你的试图元素里面。 (2)或者,对于一个Activity 和一个应用来说,在 AndroidManifest里面添加 android:theme属性到对应的<activity> 和<application>元素里面。
当你在布局里面单个视图引用一个样式,样式的属性只会被那个视图所引用。如果一个样式被引用到一个视图组,子的视图不会继承这些属性,只有你指定引用的子视图才会继承。但是,通过将该样式引用作为一个主题,所有试图对该样式即可有效。
将一个样式作为一个主题使用,你必须在AndroidManifest中的一个Activity 或者应用中添加该样式。当你这样做后,所有视图都会采用样式中它所支持的属性。比如,你将CodeFont样式 作为一个Activity的主题,所有视图支持文本样式的属性都会有效。所有不支持样式属性的视图都会忽略掉。假如一个视图只支持一些属性,那它将只采用这些属性。
对于单个视图采用样式
这里是对一个视图设置一个样式的例子:
<TextView style="@style/CodeFont" android:text="@string/hello" />
现在,TextView将会采用CodeFont的样式属性。
注意: style属性不需要使用
android:
命名空间作为前缀。Activity或者应用中使用样式
对所有activities或者应用设置样式,打开AndroidManifest.xml 文件,编辑<application> 标签,让它包含
android:theme
属性,携带样式的名字。比如:<application android:theme="@style/CustomTheme">
如果你将该主题只是应用到某个Activity里面,只是添加
android:theme
属性到<activity>
标签里面即可。- API/Guides/User Interface/Styles and Themes 翻译
- Android 开发指南翻译开篇--User Interface -Styles and Themes
- Android API Guides---Styles and Themes
- API Guide--UI Interface--Styles and Themes
- Android官方文档之User Interface(Styles and Themes)
- Android API Guides---User Interface
- API-user Interface翻译
- Android API Guides——User Interface
- Applying styles and themes
- Android Styles and Themes
- Styles and Themes
- Styles and Themes
- android--Styles and Themes
- Android - Styles and Themes
- Styles and Themes
- styles and themes
- Android-Styles and Themes
- android-Styles and Themes
- 用gdb+nm调试php c extension程序
- 了解EBP指针
- [易飞]呆滞仓物料预计领用
- 控制系统的体系结构
- ICMP 協定
- API/Guides/User Interface/Styles and Themes 翻译
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- java以及tomcat环境变量配置
- C51单片机串口通信之上位机交互
- 黑马程序员---一维数组操作
- QT 多线程信号与槽(三)
- gdb动态库延迟断点及线程/进程创建相关事件处理(上)
- Linux内核原子函数,自旋锁,信号量了解(转)
- Android Calendar的学习与运用【转】