样式属性

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

查找应用于指定的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开始的属性。例如,windowNoTitle和windowBackground样式只会影响使用了这样的主题的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.0(API级别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

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

  1. Android中样式及主题

    Android应用程序中不可避免的需要使用的样式和主题,样式指定一般指定View的高度.字体.字体颜色.背景,Android里的样荐定义在Style.xml文件里.主题也是一种样式,只不过它是应用在整 ...

  2. android colorstatelist_Android 样式系统 | 主题背景属性

    在 Android 样式系统系列的前几篇文章中,我们介绍了主题背景与样式的区别,以及为什么说通过主题背景和公共主题背景属性来分解您要实现的内容是一个不错的主意,请点击链接回顾: Android 样式系 ...

  3. android中样式文件步骤,详解Android主题开发的样式教程

    Android中的样式和css样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view 控件属性的集合.主题是一个包含一种或者多种格式化属性的集合,你可以将其为一个单位用在应用中 ...

  4. android datepicker自定义样式,android DatePicker样式

    第一次使用日期选择器 android:layout_width="match_parent" android:layout_height="match_parent&qu ...

  5. android 常用 style,Android中 Styles和Themes

    部分内容摘自: http://blog.csdn.net/woshishushangdezhu/article/details/4602597 1.什么是Style,什么是Theme? 1) Styl ...

  6. ​Android - 样式和主题

    style 样式资源定义了 UI 的格式和外观. 样式可以应用于单个视图(从布局文件中)或整个 Activity 或应用程序(从清单文件中). 定义样式 样式在与指定布局的 XML 不同的 XML 资 ...

  7. [android] 练习样式主题自定义activity切换动画

    主要练习了自定义样式和主题,继承android系统默认的样式并修改,练习xml定义淡入淡出动画 anim/fade_in.xml <?xml version="1.0" en ...

  8. android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题

    50_样式与主题 android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题 2013/5/12 50_样式与主题 ----------------- android样式和主题(st ...

  9. Android从零开始:创建样式和主题

    作为Android开发人员,我们倾向于主要专注于应用程序的功能. 但是,仅凭功能性是远远不够的. 在如今托管了超过一百万个应用程序的Google Play上,外观与功能同等重要,甚至更多. 如果您觉得 ...

最新文章

  1. mysql报错:This version of MySQL doesn’t yet support ‘LIMIT IN/ALL/ANY/SOME 解决方法
  2. ajax php 区别,PHP中AJAX比较(转)
  3. tensorboard scalar图下载失败不完整解决
  4. sql语句中时间格式转化举例
  5. 机器学习偏差方差_机器学习101 —偏差方差难题
  6. mac上python3安装HTMLTestRunner
  7. JAVA入门级教学之(异常的处理try...catch)
  8. 使用代码为TextView设置drawableLeft
  9. ASP.NET使用Coolite.Ext.Web.dll,显示ext未定义的解决方法
  10. 在一头扎进机器学习前应该知道的那些事儿 1
  11. mysql修改root密码及修改密码过程中报错的解决方案
  12. P3986 斐波那契数列
  13. 王爽《汇编语言》检测点1.1答案及解析
  14. java smtp.126.com_java实现邮件发送
  15. 多显示器屏幕枚举方法
  16. Mac10.15使用360加固提示APK解析失败,无法通过aapt检测。null 或者无法打开“aapt”,因为无法验证其完整性
  17. HyperLedger Fabric - 超级账本(2.2)启动网络 - 手动
  18. 配置JDK / JAVA
  19. 可敬可悲硅谷人 科技富豪失乐园
  20. html 自动悬浮,HTML 悬浮float介绍

热门文章

  1. drupal mysql_Drupal MySQL查询优化
  2. 100转换成二进制 java,一段简单的java代码,十进制转二进制
  3. linux suid提权原理,Linux SUID、SGID、sticky提权
  4. ios 不被遮挡 阴影_为何你没见到日环食?你不知道的天象常识原来还有这么多 | 返朴...
  5. string类的相关知识及部分操作
  6. leetcode 33 搜索旋转排序数组 到处是细节的好题
  7. python(15)-window7配置iPython
  8. 周志华《Machine Learning》 学习笔记系列(1)--绪论
  9. finally语句与return语句的执行顺序
  10. 如何系统性地保障软件性能