Android - 概述

Android - 样式和主题

样式资源定义格式并查找UI.样式可以应用于单个视图(从布局文件中)或整个活动或应用程序(从清单文件中).

定义样式

样式在XML资源中定义,该资源与指定布局的XML分开.此XML文件位于项目的 res/values/目录下,并且< resources> 作为样式文件必需的根节点. XML文件的名称是任意的,但必须使用.xml扩展名.

您可以使用< style> 标记为每个文件定义多个样式但是每种样式都有其唯一标识样式的名称. Android风格属性使用< item> 标记设置,如下所示 :

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="CustomFontStyle">
      <item name="android:layout_width">fill_parent</item>
      <item name="android:layout_height">wrap_content</item>
      <item name="android:capitalize">characters</item>
      <item name="android:typeface">monospace</item>
      <item name="android:textSize">12pt</item>
      <item name="android:textColor">#00FF00</item>/> 
   </style>
</resources>


< item>的值可以是关键字字符串,十六进制颜色,对另一种资源类型的引用或其他值,具体取决于样式属性.

使用样式

定义样式后,您可以使用样式属性在XML布局文件中使用它,如下所示 :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <TextView
      android:id="@+id/text_id"
      style="@style/CustomFontStyle"
      android:text="@string/hello_world" />

</LinearLayout>


样式继承

Android支持样式继承,与网页设计中的级联样式表非常相似.您可以使用它来继承现有样式的属性,然后仅定义要更改或添加的属性.

要实现自定义主题,请创建或编辑MyAndroidApp/res/values/themes.xml并添加以下 :

<resources>
   ...
   <style name="MyCustomTheme" parent="android:style/Theme">
   <item name="android:textColorPrimary">#ffff0000</item>
   </style>
   ...
</resources>


在你的AndroidManifest.xml中,将主题应用于你要设置样式和减去的活动;

<activity
   android:name="com.myapp.MyActivity"
   ...
   android:theme="@style/MyCustomTheme"
   />


您的新主题将应用于您的活动,文字现在呈现鲜红色.

主题

将颜色应用于主题属性

然后您的颜色资源可应用于某些主题通过添加< item>属性,例如窗口背景和主要文本颜色.自定义主题的元素.这些属性在styles.xml文件中定义.例如,要将自定义颜色应用于窗口背景,请添加以下两个< item>自定义主题的元素,在MyAndroidApp/res/values/styles.xml文件中定义 :

<resources>
   ...
   <style name="MyCustomTheme" ...>
      <item name="android:windowBackground">@color/my_custom_color</item>
      <item name="android:colorBackgroundCacheHint">@color/my_custom_color</item>
   </style>
   ...
</resources>

Theme

使用自定义九-Patch With Buttons

9-patch drawable是一种特殊的图像,可以在宽度和高度上进行缩放,同时保持其视觉完整性.九个补丁是指定Android按钮外观的最常用方法,但可以使用任何可绘制类型.

九个补丁按钮

一个Nine-Patch按钮样本

创建九个补丁按钮的步骤

  • 将此位图保存为/res/drawable/my_nine_patch.9.png

  • 定义新样式

  • 将新按钮样式应用于自定义主题的buttonStyle属性

定义新样式

<resources>
   ...
      <style name="MyCustomButton" parent="android:Widget.Button">
      <item name="android:background">@drawable/my_nine_patch</item>
      </style>
   ...
</resources>


应用主题

<resources>
   ...
      <style name="MyCustomTheme" parent=...>
         ...
         <item name="android:buttonStyle">@style/MyCustomButton</item>
      </style>
   ...
</resources>

Theme

Android主题

希望你理解Style的概念,现在让我们试着理解什么是主题.主题只是应用于整个活动或应用程序的Android样式,而不是单个视图.

因此,当样式应用为主题时,每个 View 在Activity或应用程序中将应用它支持的每个样式属性.例如,您可以将相同的 CustomFontStyle 样式应用为活动的主题,然后活动中的所有文本都将具有绿色等宽字体.

要为应用程序的所有活动设置主题,请打开 AndroidManifest.xml 文件并编辑< application> 标记以包含带有样式名称的android:theme 属性.例如 :

<application android:theme="@style/CustomFontStyle">


但是如果你想在你的应用程序中只应用一个主题,那么将android:theme属性添加到< activity>仅标记.例如 :

<activity android:theme="@style/CustomFontStyle">


Android定义了许多默认主题,您可以直接使用它们,也可以使用 parent 属性继承它们,如下所示 :

<style name="CustomTheme" parent="android:Theme.Light">
   ...
</style>


为调色板设置样式

布局设计可以基于它们基于颜色实现,例如,设计如下设计基于它们的颜色(蓝色)

主题

以上布局设计基于style.xml文件,其位于 res/values/

<resource>
   <style name="AppTheme" parent="android:Theme.Material">	
      <item name ="android:color/primary">@color/primary</item>
      <item name ="android:color/primaryDark">@color/primary_dark</item>
      <item name ="android:colorAccent/primary">@color/accent</item>
   </style>
<resource>


默认样式&主题

Android平台提供了大量可在应用程序中使用的样式和主题.您可以在 R.style 类中找到所有可用样式的参考.要使用此处列出的样式,请使用句点替换样式名称中的所有下划线.例如,您可以将Theme_NoTitleBar主题应用于"@android:style/Theme.NoTitleBar".