博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 用户界面---样式和主题(Styles and Themes)(一)
阅读量:5825 次
发布时间:2019-06-18

本文共 2422 字,大约阅读时间需要 8 分钟。

样式是给ViewWindow指定外观和格式的属性集合。样式能够指定如高、边距、字体颜色、字体尺寸、背景颜色等属性。样式被定义在一个与布局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" />

上例中所有的样式相关的属性都被从布局XML中删除了,并且把这些样式放到了一个叫做CodeFontXML样式定义中,然后把它设置给style属性。

主题是应用与整个Activity或应用程序的样式,而不是一个独立的View对象。当一个样式被用作主题时,Activity或应用程序中的每个View对象都会使用它所支持的每个样式属性。例如,把相同的CodeFont样式用作一个Activity的主题,那么这个Activity内的所有文本都会使绿色等宽字体。

定义样式

要创建一个样式集,就要把一个XML文件保存项目目录的res/values目录中。XML文件的名字是随意的,但是必须使用.xml扩展名,并且保存在res/values文件夹中。

这个XML文件的根节点必须是<resources>

对于要创建的每个样式,都要在这个XML文件中添加一个<style>元素,并永name属性唯一的标识这个样式(这个属性是必须的),然后给样式的每个属性添加一个<item>元素,这个元素的name属性用于声明样式的属性名,属性值被放在一组<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,当前样式可以继承这个指定样式的属性,然后如果需要,可以覆写被继承的样式属性。

请记住,把XML中定义的一个样式用作一个Activity或应用程序的主题与给一个View对象定义样式完全相同。如上面示例中定义的样式能够被应用于一个View对象,或者用作一个Activity或应用程序的主题。

样式继承性

<style>元素中的parent属性可以继承一个既存的样式属性,然后只定义需要改变和添加的属性。你能够继承自己定义的样式,也可以继承平台内置的样式。例如,下例继承了Android平台的默认文本外观并且修改了文本的颜色:

<stylename="GreenText"parent="@android:style/TextAppearance">

        <itemname="android:textColor">#00FF00</item>
   
</style>

如果想要继承自己定义的样式,就不必使用parent属性,但是要把想要继承的样式名做新样式名的前缀(用点分开)。如,要创建一个新的继承上面定义的CodeFont样式的样式,但是要使用红色的文字,可以设计以下新样式:

    <stylename="CodeFont.Red">

        <itemname="android:textColor">#FF0000</item>
   
</style>

注意在<style>标签中没有parent属性,但是因为name属性值用CodeFont样式名开始(这个样式已经被创建),所以这个样式会继承CodeFont样式定义的所有样式,然后它覆写了android:textColor属性,把文本设置为红色。来引用这个样式。

通过用点把名字连接方法,可以实现样式的层次继承,如可以把上面的CodeFont.Red样式扩展成设置字体的样式:

    <stylename="CodeFont.Red.Big">

        <itemname="android:textSize">30sp</item>
   
</style>

这个样式继承了CodeFontCodeFont.Red样式,然后添加了android:textSize属性。

注意:这种通过把名字连接在一起的继承性只对自己定义的样式有效。不能用这种方法来继承Android内置的样式。要引用内置的样式,如TextAppearance样式,就必须使用parent属性。

转载地址:http://ousdx.baihongyu.com/

你可能感兴趣的文章
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
Android状态栏实现沉浸式模式
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
查看>>
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>