Android 用户界面---样式和主题(Styles and Themes)(二)

样式属性

理解了样式是如何定义的之后,就需要学习<item>元素都定义了那些有效的样式属性类型。你可能已经熟悉了像layout_widthtextColor属性,但是还有更多的可以使用的样式属性。

查找应用于指定的View对象的最好的地方是对应的类参考,类参考中会列出所有的XML所支持的属性。例如,在TextView类的XML属性表中列出了所有的能够用于定义TextView元素(或者它的一个子类)的样式。在这个类参考中列出了一个属性:android:inputType,这个属性通常被放在<EditText>元素中,如:

<EditText
   
android:inputType="number"
    ...
/>
可以通过给EditText元素创建以下的样式定义来替代上例中android:inputType属性声明:

<stylename="Numbers">
 
<itemname="android:inputType">number</item>
  ...
</style>

因此对于布局的XML可以使用以下方法来声明:

<EditText
   
style="@style/Numbers"
    ...
/>

这个简单的例子看上去有很多工作,但是当你要添加更多的样式属性,并且要在各种地方复用这些样式时,就会省去很多工作。

对于所有可用的样式属性,请参考R.attr类,要记住的是不是所有的View对象都接受R.attr类中定义的所有的相同的样式属性,因此,通常应该给特定View对象指定其支持的样式属性。但是,对于应用于一个View对象上的所有其不支持的样式属性,这个View对象只会使用它们所支持的那些属性,并简单的把不支持的属性忽略。

但是,有些样式属性不被任何View对象支持,只能用于主题。这些样式属性应用与整个窗口,不真对任何View类型。例如,能够隐藏应用标题的主题样式属性,隐藏状态栏或改变窗口背景的样式属性。这些样式属性不属于任何View对象。要查看这些仅用于主题的样式属性,请参考R.attr类中用window开始的属性。例如,windowNoTitlewindowBackground样式只会影响使用了这样的主题的Activity或应用程序。

注意:在每个<item>元素的声明中name属性的前缀名不要忘记使用android:命名空间,如<item name=”android:inputType”>

UI应用样式和主题:

有以下两种方式来设置样式:

1.       通过给XML中布局的一个View元素添加style属性,来给一个单独的View对象设置样式;

2.       或者,通过给Android清单文件中的<activity><application>元素添加android:theme属性,来给整个Activity或应用程序添加主题。

当把一个样式应用于布局中单一的View对象时,这个样式定义的属性只会用于这个View对象。如果样式被用于一个ViewGroup对象,那么其中的View子对象不会继承这个样式属性---样式只会用于直接引用该样式的元素。但是,通过样式主题,可以把一个样式应用与所有的View元素。

要把样式定义用于主题,就必须把这个样式用于Android清单文件中的<activity><application>元素。这么做的时候,Activity或应用程序中的每个View对象都会应用它们所支持的属性。例如,给一个Activity应用之前定义的CodeFont样式,那么这个Activity中支持这个文本样式属性的所有View元素都会使用这个样式,不支持这个属性的任何View对象会忽略它。

View对象应用一个样式

以下是给XML布局中的一个View对象设置样式的方法:

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

这样TextView元素将会使用CodeFont中定义的样式。

注意:style属性不使用android:命名空间前缀。

Activity或应用程序应用主题

要给应用程序的所有Activity设置主题,就要在AndroidManifest.xml文件的<application>元素中包含android:them属性,如:

<applicationandroid:theme="@style/CustomTheme">

如果要把一个主题只用于应用程序中的一个Activity,那么就要在<activity>元素中添加android:theme属性。

Android提供的其他内置资源一样,有一些系统预定义的主题可以使用,因此要避免自己编写它们。例如,可以使用Dialog主题,让Activity的显示效果像一个对话框:

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

如果要让背景透明,就使用透明的主题:

<activityandroid:theme="@android:style/Theme.Translucent">

如果要使用一个主题,但需要调整,那么可以把这个主题作为定制主题的父主题。例如,可以修改传统的亮度主题,并添加自己想要的颜色:

<colorname="custom_theme_color">#b0b0ff</color>
<stylename="CustomTheme"parent="android:Theme.Light">
   
<itemname="android:windowBackground">@color/custom_theme_color</item>
   
<itemname="android:colorBackground">@color/custom_theme_color</item>
</style>

上例中需要的颜色是用独立的资源提供的,这是因为android:windowBackground属性仅支持对另一个资源的引用,跟android:colorBackground不一样,它不能接收颜色值的设定。

现在可以在Android清单文件内使用CustomTheme来替代Theme.Light

基于平台版本来选择主题

比较新的Android版本中附带了一些应用程序可以利用的主题,并在这些平台上运行时,可能要使用这些主题,同时依然要兼容旧的版本。基于不同的平台版本,通过选择定制主题所使用的资源在不同的父主题之间的切换来达到兼容的目的。

例如,以下是用标准的平台默认的亮度主题声明的一个简化的定制主题,它被放在res/values文件夹下的一个XML文件中(通常是res/values/styles.xml:

<stylename="LightThemeSelector"parent="android:Theme.Light">
   
...
</style>

当应用程序运行在Android3.0API级别11)或更高的版本上时,针对这个主题要使用比较新的holographic主题,所以,要在res/values-v11的文件夹下的一个XML文件中放入一个可选的主题声明,把它的父主题设置为holographic主题:

<stylename="LightThemeSelector"parent="android:Theme.Holo.Light">
   
...
</style>

现在就可以像平常一样使用这个LightThemSelector主题了,如果应用程序运行在Android3.0或更高的版本,就会自动的切换到holographic主题。

R.styleable.Theme类中可以找到用于主题的标准属性列表。

有关提供可选资源的更多信息,如基于平台版本或其他设备配置的主题和布局,可以查看“Providing Resources”文档。

http://developer.android.com/guide/topics/resources/providing-resources.html

使用平台样式和主题

Android平台提供了一个大的用于应用程序的样式和主题集合。可以在R.style类中找到所有可用的样式。要使用其中列出的样式,就要用一个前缀来替换在样式名中的所有下划线。如,可以用”@android:style/Theme.NoTitleBar”来替代Theme_NoTitleBar

但是,R.style类文档没有完整的描述样式,因此查看实际的使用这些样式和主题的源代码会更好的帮助理解提供的每种样式属性。为了更好的引用Android的样式和主题,请看下列源代码:

1.  Android样式(styles.xml

2.  Android主题(themes.xml

这两个文件会通过例子帮助你设计,例如,在Android主题的源代码中,能够找到<style name=”Theme.Dialog”>声明。在这个定义中,可以看到所有的Android框架使用的对话框样式属性。

 

 

转载于:https://www.cnblogs.com/andriod-html5/archive/2012/03/31/2539436.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android应用程序结构总结

2019独角兽企业重金招聘Python工程师标准>>> Android应用程序结构分析 由于是初学者&#xff0c;对于Android应用程序的结构的认识是一穷二白的&#xff0c;对于开发Android应用程序&#xff0c;必须先了解其程序的结构和作用。一下就用一个简单的例子来解剖&#…

递归--整数划分问题

问题描述&#xff1a; 将正整数n表示成一系列正整数之和&#xff1a;nn1n2…nk&#xff0c;其中n1≥n2≥…≥nk≥1&#xff0c;k≥1。正整数n的这种表示称为正整数n的划分。 问题1&#xff1a; 输出整数n的所有可能的划分&#xff0c;如&#xff1a; 输入&#xff1a;6 输出&am…

嵌入式软件开发注意事项一

嵌入式软件开发注意事项一1、首先对测试板进行各方面硬件性能的测试&#xff1a;电源测试&#xff0c;时钟测试等等。要确保硬件最基本的几个性能是正常的&#xff0c;否则后面真的无法进行软件的开发&#xff0c;因为如果你没有确保硬件的正确性&#xff0c;那么后面进行软件调…

Oracle 表空间与数据文件

-- --Oracle 表空间与数据文件 -- /* 一、概念 表空间&#xff1a;是一个或多个数据文件的逻辑集合 表空间逻辑存储对象&#xff1a;永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空间分类&#xff1a;系统表空间…

简单的深度优先遍历和广度优先遍历

代码来源于《啊哈&#xff01;算法》。 1、深度优先遍历&#xff1a; &#xff08;1&#xff09;无权值 #include<stdio.h> int book[101],n, e[1001][1001], sum; void DFS(int cur) {int h;sum;printf("%d ", cur);//目前所在点进行的操作&#xff0c;可以…

【 2013华为杯编程大赛成都第三组前两题试题及答案】

2013-09-12 16:41:24 题目描述 某省会城市街道纵横交错&#xff0c;为了监控路灯的运行状况&#xff0c;每条街道使用一个数字字符串标识该街道上所有路灯的运行状况。假设路灯只有如下3种状态&#xff08;分别用数字0, 1, 2标识&#xff0c;一盏路灯只对应其中一种状态&#x…

webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

webrtc是google推出的基于浏览器的实时语音-视频通讯架构。其典型的应用场景为&#xff1a;浏览器之间端到端(p2p)实时视频对话&#xff0c;但由于网络环境的复杂性(比如&#xff1a;路由器/交换机/防火墙等&#xff09;&#xff0c;浏览器与浏览器很多时候无法建立p2p连接&…

ADS中startup.s文件启动分析

映像文件分析&#xff0c;ADS 中startup.s 文件启动分析&#xff0c;学嵌入式开发ADS 必看2010-04-17 10:21声明&#xff1a; 我也是转来的&#xff0c;不是原创&#xff0c;由于别人是网易的日志&#xff0c;不能直接转&#xff0c;所以…… 感谢原创&#xff01;让我明白了st…

String Statistics(2008年珠海市ACM程序设计竞赛)

String Statistics 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 描述 You have an n n matrix of lower-case letters. You start from somewhere in the matrix, walk in one of the eight directions (left, right, up, down, up-left, up-right, …

从0-1背包问题学习回溯法、分支界限法、动态规划

一、0-1背包问题的描述 下面将使用回溯法、分支界限法、动态规划法来分析和解决此问题。 二、回溯法 &#xff08;1&#xff09;算法步骤 &#xff08;2&#xff09;代码如下&#xff08;没有裁剪函数&#xff09;&#xff1a; 用i和n来判断结束与否&#xff0c;是因为解空间…

高可用性的HDFS—Hadoop分布式文件系统深度实践

《高可用性的HDFS—Hadoop分布式文件系统深度实践》基本信息作者&#xff1a; 文艾 王磊 出版社&#xff1a;清华大学出版社 ISBN&#xff1a;9787302282587上架时间&#xff1a;2012-5-14出版日期&#xff1a;2012 年5月开本&#xff1a;16开页码&#xff1a;371版次&#xff…

推荐:解析“extern”

http://blog.csdn.net/keensword/article/details/401114 写的很不错转载于:https://www.cnblogs.com/ATually/archive/2012/04/05/2432826.html

【字符串问题】求一个字符串中重复出现的最长的子串

2013-09-14 15:34:16 用后缀数组求一个字符串中重复出现的最长的子串。 用C中的string类可以很方便地进行操作&#xff0c;需将后缀数组保存在vector<string>&#xff0c;如下面代码中的string版本所示&#xff0c;但这样就会因为<string>有很大的开销&#xff1b;…

关于scanf和的问题

简单地说&#xff0c;如果使用scanf函数把一个字符串读进一个字符数组中&#xff0c;不要使用&&#xff1b;读取其他基本变量类型时&#xff0c;在变量名之前添加&。或者说&#xff0c;字符串名字本身就是一个地址了&#xff0c;所以不用取地址符。 如以下代码&#xf…

Oracle lower() Upper()函数

即将某字段信息中的字母转成小写、大写的方法。 将 user表里的user_name字段信息中含有字母的全部转成大写的方法&#xff1a; update user set  user_nameUpper(user_name) 同理得到将 user表里的user_name字段信息中含有字母的全部转成小写的方法&#xff1a; update user …

【作品】超级玛丽射击版

【下载地址】稍后上传 【以下内容摘自试验报告&#xff0c;可能狗屁不通&#xff0c;尽情谅解】 &#xff0d;游戏介绍: 简单的射击游戏,键盘控制动作[角色的移动,跳跃等],鼠标控制攻击的位置方向, 单击鼠标即射击,同时可以设置游戏规定时间,时间到则结束游戏. &#xff0d;游戏…

嵌入式系统Linux内核开发工程师必须掌握的三十道题

嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理&#xff0c;那么你就可以算得上是基本合格的Linux内核开发工程师&#xff0c;试试看&#xff01; 1) Linux中主要有哪几种内核锁&#xff1f; Linux的内核锁主要是自旋锁和信号…

MySQL锁的用法之行级锁

2019独角兽企业重金招聘Python工程师标准>>> 行级锁是MySQL中粒度最小的一种锁&#xff0c;他能大大减少数据库操作的冲突。但是粒度越小&#xff0c;实现的成本也越高。MYISAM引擎只支持表级锁&#xff0c;而INNODB引擎能够支持行级锁&#xff0c;下面的内容也是针…

matlab中二维插值函数interp2的使用

下面是一段产生log-normal分布的代码&#xff0c;以此进行说明。 clear all; clc; for t1:100Traffic(t) curve(t); end MaxTraffic max(Traffic); w 0.2; Wmax 2*pi*w/3000; x[0:10:300]; y[0:10:300]; Nxlength(x); Nylength(y); Sigma 0.53; t 0&#xff1b; M 10*cu…