Android Styles 和 Themes 怎么用?

文章导读
上一个 测验 下一个 style 资源定义了 UI 的格式和外观。样式可以应用于单个 View(从布局文件中)或整个 Activity 或应用(从清单文件中)。
📋 目录
  1. A 定义样式
  2. B 使用样式
  3. C 样式继承
  4. D 将颜色应用到主题属性
  5. E 使用自定义 Nine-Patch 与按钮
  6. F Android 主题
  7. G 样式化颜色调色板
  8. H 默认样式与主题
A A

Android - 样式和主题



上一个
测验
下一个

style 资源定义了 UI 的格式和外观。样式可以应用于单个 View(从布局文件中)或整个 Activity 或应用(从清单文件中)。

定义样式

样式在与指定布局的 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 布局文件中使用 style 属性来应用它,如下所示 −

<?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 Style 相关的概念,您可以查看 Style Demo 示例。

样式继承

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 −

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

您的新主题将应用到您的 activity,文本现在是鲜红色的。

Theme

将颜色应用到主题属性

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

<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

使用自定义 Nine-Patch 与按钮

nine-patch drawable 是一种特殊的图像,可以在保持视觉完整性的同时缩放宽度和高度。Nine-patch 是指定 Android 按钮外观的最常见方式,尽管也可以使用任何 drawable 类型。

Nine Patch Button

Nine-Patch 按钮示例

创建 Nine-Patch 按钮的步骤

  • 将此位图保存为 /res/drawable/my_nine_patch.9.png
  • 定义一个新 style
  • 将新按钮 style 应用到自定义 theme 的 buttonStyle 属性

定义新 Style

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

应用 Theme

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

Android 主题

希望你已经理解了 Style 的概念,现在让我们来了解什么是 Theme。Theme 就是一个应用于整个 Activity 或应用程序的 Android style,而不是单个 View。

因此,当 style 被作为 theme 应用时,Activity 或应用程序中的每个 View 都会应用它所支持的每个 style 属性。例如,你可以将相同的 CustomFontStyle style 作为某个 Activity 的 theme 应用,然后该 Activity 中的所有文本都将使用绿色等宽字体。

要为应用程序的所有 activity 设置 theme,请打开 AndroidManifest.xml 文件并编辑 <application> 标签,添加 android:theme 属性并指定 style 名称。例如:

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

但如果你只想将 theme 应用到应用程序中的一个 Activity,则只需在 <activity> 标签中添加 android:theme 属性。例如:

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

Android 定义了许多默认 theme,你可以直接使用它们,或使用 parent 属性继承它们,如下所示:

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

要了解与 Android Theme 相关的概念,你可以查看 Theme Demo 示例。

样式化颜色调色板

布局设计可以基于主题颜色来实现,例如以下设计就是基于主题颜色(蓝色)设计的。

Theme

上述布局是基于 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 类中找到所有可用样式的参考。要使用此处列出的样式,请将样式名称中的下划线替换为句点。例如,你可以使用 "@android:style/Theme.NoTitleBar" 来应用 Theme_NoTitleBar 主题。你可以查看以下 Android 样式和主题的源代码:

  • Android 样式 (styles.xml)

  • Android 主题 (themes.xml)