Styles and Themes

样式是指定视图或窗口的外观和格式属性的集合。样式可以指定诸如高度,填充,字体颜色,字体大小,背景颜色,以及更多的特性。样式是在从指定布局XML单独的XML资源定义。
在Android的风格分享网站类似的理念,以层叠样式表的设计,它们允许你设计与内容分开。
例如,通过使用一种风格,你可以把这个布局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取出并放入称为CodeFont样式定义,然后将其与式属性的应用。您将看到定义这种风格在下面的部分。


主题是应用于整个活动或应用程序,而不是单个视图的样式(如在上面的例子)。当风格为主题应用,在活动或应用程序的每一个视图将应用支持的每个样式属性。例如,您可以将相同CodeFont风格为活动主题,然后将该活动内部的所有文本将有绿色的等宽字体。


定义样式


要创建一组样式,保存在XML文件中项目的RES /价值/目录下。 XML文件的名称是任意的,但必须使用.xml扩展名和保存在res /价值/文件夹中。


XML文件的根节点必须<资源>。
<?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>元素的每个孩子被转换成在编译时的应用程序资源对象,这可以通过在<样式>元素的名称属性的值来引用。这个例子风格可以从XML布局@风格/编码字体(如表现在引入以上)引用。
在<style>元素的父属性是可选的,指定的另一种风格从这种风格要继承属性的资源ID。然后,您可以覆盖继承的样式属性,如果你想。
请记住,您要为活动使用或申请的主题是在XML完全一样的景色的样式定义的样式。如上所定义的一个的样式,例如可以作为一个样式用于单个视图或作为整个活动或应用程序中的主题被应用。如何申请一个样式的单一视图或作为应用主题稍后讨论。
遗产
在<风格>的父元素的属性,您可以指定从中你的风格要继承属性的样式。您可以使用此继承从现有的样式属性,然后定义只是你要更改或添加的属性。您可以从您自己创建的样式或从内置到平台的风格继承。 (约从Android平台定义的样式继承请参阅使用平台的样式和主题,下面,以供参考。)例如,你可以继承Android平台的默认文本外观,然后修改它:

对于要创建的每一个款式,一个<style>元素添加到该文件,以唯一标识样式(需要此属性)的名称。然后添加一个<item>元素的这种风格的每个属性,与声明样式属性,并且去用它的值(需要此属性)的名称。该值的<项>可以是关键字字符串,一个十六进制颜色,到另一个资源类型的引用,或根据不同的样式属性的其他值。这里有一个单一风格的示例文件:

  <style name="GreenText" parent="@android:style/TextAppearance">    <item name="android:textColor">#00FF00</item>  </style>
如果你想从您已经定义自己的风格继承,你不必使用父属性。相反,只是前缀要继承来的新样式的名称,用句点分隔的样式的名称。例如,要创建一个新的风格,继承了上述定义的代码字体的风格,但要红色,你可以创作新的样式这样的:

<style name="CodeFont.Red">    <item name="android:textColor">#FF0000</item>  </style>
请注意,有在<style>标签没有parent属性,但由于名称属性与CodeFont样式名称开始(这是你已经创建了一个风格),这种风格将继承该样式的所有样式属性。这种风格将覆盖了android:textColor属性,使文本显示为红色。您可以参考这个新的样式风格的@/ CodeFont.Red。


您可以继续秉承这样很多次,只要你愿意,用时间链接名称。例如,您可以扩展到CodeFont.Red更大,具有:

  <style name="CodeFont.Red.Big">    <item name="android:textSize">30sp</item>  </style>
这继承了来自CodeFont和CodeFont.Red样式,然后添加了android:TEXTSIZE属性。


注:此方法继承由名字串联起来只适用于通过自己的资源定义的样式。你不能继承的Andr​​oid内置样式这种方式。要引用内置样式,如TextAppearance,则必须使用父属性。


样式属性


现在你明白一个风格是如何定义的,你需要学习由<项目>什么样的​​风格属性定义元素都可用。你可能熟悉一些已有,比如layout_width和文字颜色。当然,你可以使用更多的样式属性。


要找到适用于特定查看其属性的最好的地方是对应的类引用,其中列出了所有支持的XML属性。例如,所有在TextView的XML属性的表中列出的属性都可以在一个样式定义用于一个TextView元件(或它的子类中的一个)。其中在参考中列出的属性是机器人:inputType下,所以在这里你可能通常放置的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。请记住,所有View对象不接受所有相同的样式属性,所以你通常应参阅特定视图类支持的样式属性。但是,如果应用样式到不支持所有的样式属性的视图,视图将仅适用于所支持的这些属性和根本不理会其他人。
一些样式属性,但是,不被任何查看元件支撑并只能应用于作为主题。这些样式属性适用于整个窗口,而不是任何类型的视图。例如,主题可以隐藏应用程序标题样式属性,隐藏状态栏,或者改变窗口的背景。这些类型的样式属性不属于任何View对象。为了发现这些唯一的主题风格的特性,我们看看与窗口开始属性R.attr参考。例如,windowNoTitle和windowBackground的样式属性只有当风格为题材的活动或应用程序的应用是有效。请参阅有关应用风格为主题的信息下一节。
注意:不要忘记在每个<item>元素与Android的前缀属性名称:命名空间。例如:<项目名称=“机器人:inputType下”>。
应用样式和主题的UI
有两种方法来设置样式:
到单个视图中,在XML为布局添加style属性到视图元素。
或者,整个活动或应用程序,加入了Android:在Android清单主题属性添加到<活动>或<应用>元素。
当您应用样式布局的单一视图,由样式定义的属性只适用于这一观点。如果样式应用到一个ViewGroup中,子视图元素不会继承的样式属性,只有元素您直接应用的样式将应用其属性。但是,可以使之适用于所有视图元素,通过应用风格为主题应用样式。
要应用样式定义为题材,必须应用样式到Android清单的活动或应用程序。当你这样做,活动或应用程序中的每个视图将应用其支持的每个属性。例如,如果您从前面的示例应用CodeFont风格发挥到了活动,则支持文本样式属性的所有视图元素将应用它们。不支持属性的任何视图会忽略它们。如果一个View仅支持某些属性,那么它将只适用于那些属性。
应用样式视图
以下是如何设置样式为XML布局视图:

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

现在名为CodeFont风格所定义的本TextView的将样式。 (请参见上面的示例中定义样式)。


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


将主题应用到一个Activity或应用程序


设定主题为应用程序的所有活动,打开AndroidManifest.xml文件并编辑<应用程序>标签包含了android:用样式名称主题属性。 例如:

现在名为CodeFont风格所定义的本TextView的将样式。 (请参见上面的示例中定义样式)。


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


将主题应用到一个Activity或应用程序


设定主题为应用程序的所有活动,打开AndroidManifest.xml文件并编辑<应用程序>标签包含了android:用样式名称主题属性。 例如:

<application android:theme="@style/CustomTheme">
主题属性添加到<活动>标签来代替:如果你想应用到你的应用程序只有一个活动主题,那么Android的补充。


正如Android提供其他内置的资源,有可以使用,以避免自己写他们许多预先定义的主题。例如,您可以用对话的主题,让你的活动看起来像一个对话框:

<activity android:theme="@android:style/Theme.Dialog">
者,如果你想要的背景是透明的,用半透明的主题:

<activity android:theme="@android:style/Theme.Translucent">
如果你喜欢的主题,但想调整它,只需添加主题,自定义主题的父。例如,您可以修改传统光源主题中使用自己的颜色是这样的:

<color name="custom_theme_color">#b0b0ff</color><style name="CustomTheme" parent="android:Theme.Light">  <item name="android:windowBackground">@color/custom_theme_color</item>  <item name="android:colorBackground">@color/custom_theme_color</item></style>
请注意,颜色需要提供如下独立的资源,因为在android:windowBackground属性只支持到另一个资源的参考;不像机器人:colorBackground,它不能被赋予一种颜色的文字)
现在,使用自定义主题,而不是Android清单内Theme.Light:

<activity android:theme="@style/CustomTheme">
选择基于平台版本主题


Android版的新版本有更多的主题,提供给应用程序,你可能希望在这些平台上运行,同时仍然与旧版本兼容而使用这些。可以通过使用资源选择基于所述平台版本,不同的父主题之间切换自定义主题实现此目的。


例如,下面是一个自定义的主题,这简直就是标准的平台默认的主题光的声明。它会去下RES /值的XML文件(通常RES /价值观/ styles.xml):

<style name="LightThemeSelector" parent="android:Theme.Light">  ...</style>
有这个主题时使用的应用程序在Android3.0(API等级11)或者更高的运行新的全息主题,你可以把一个替代声明中RES /值-V11的XML文件的主题,但做父母的主题全息主题:

<style name="LightThemeSelector" parent="android:Theme.Holo.Light">  ...</style>
现在使用这个主题喜欢你任何其他的,如果在Android 3.0或更高版本上运行你的应用程序会自动切换到全息主题。


您可以在主题使用标准的属性列表可以在R.styleable.Theme找到。


有关提供替代资源,如主题和布局的基础上,平台版本或其他设备配置的详细信息,请参阅参考资料提供文件。


使用Platform样式和主题


Android平台提供了一个大集合风格和主题,你可以在你的应用程序中使用。你可以找到在R.style类的所有可用的样式参考。要使用此处列出样​​式,替换所有下划线在样式名称与一个时期。 “:风格/ Theme.NoTitleBar @android”例如,你可以应用Theme_NoTitleBar主题。


该R.style参考,但是,是不是有据可查的,不彻底的描述风格,让观看这些风格和主题实际的源代码会给你一个更好地了解哪些样式属性每一个提供。为了更好的参考Android的风格和主题,看看下面的源代码:


Android的样式(styles.xml)
Android的主题(的themes.xml)
这些文件将帮助您通过学习的榜样。例如,在Android主题的源代码,你会发现<样式名称=“Theme.Dialog”>的声明。在这个定义中,你会看到所有用于由Android框架使用样式对话框中的属性。


有关XML的语法的风格和主题的更多信息,请参阅样式资源文件。


有关可用样式的参考属性,你可以用它来定义风格或主题(例如,“windowBackground”或“textAppearance”),请参阅R.attr或各自的视图类要为其创建一个样式。

更多相关文章

  1. 彻底搞清楚Android中的 Attr
  2. [置顶] 我的Android进阶之旅------>关于android:layout_weight属
  3. 设置AlertDialog的列表样式
  4. Android中ImageView控件的ScaleType属性使用详解
  5. Android(安卓)MVVM架构模式 详解和综合运用(一)
  6. android仿腾讯安全管家首页抽屉效果
  7. Android(安卓)MVC模式实例(一)
  8. android 中 Notification 关于状态栏的一些操作
  9. Android实现异步处理

随机推荐

  1. Android(安卓)多媒体扫描过程(Android(安
  2. eclipse android 设置及修改生成apk的签
  3. android两次点击的焦点问题
  4. 教你如何修改Android默认字体大小和设置
  5. android中添加自己的驱动
  6. 转:Android电话系统之-rild
  7. Could not find method android() for ar
  8. android 指纹识别 之 BiometricPrompt的
  9. Android中为APP创建快捷方式的原理(自己的
  10. Android(安卓)使用小技巧之 :new Handler(