Android(安卓)样式与主题

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

定义样式

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

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <style name="CustomFontStyle">
  4. <item name="android:layout_width">fill_parent</item>
  5. <item name="android:layout_height">wrap_content</item>
  6. <item name="android:capitalize">characters</item>
  7. <item name="android:typeface">monospace</item>
  8. <item name="android:textSize">12pt</item>
  9. <item name="android:textColor">#00FF00</item>/>
  10. </style>
  11. </resources>

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


使用样式

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:id="@+id/text_id"
  8. style="@style/CustomFontStyle"
  9. android:text="@string/hello_world" />
  10. </LinearLayout>

要了解与 Android 样式相关的概念,可以查看 样式 Demo 实例


Style 继承

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

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

  1. <resources>
  2. ...
  3. <style name="MyCustomTheme" parent="android:style/Theme">
  4. <item name="android:textColorPrimary">#ffff0000</item>
  5. </style>
  6. ...
  7. </resources>

在你的 AndroidManifest.xml 中将主题应用于您想要设置样式的活动:

  1. <activity
  2. android:name="com.myapp.MyActivity"
  3. ...
  4. android:theme="@style/MyCustomTheme"
  5. />

您的新主题将应用于您的 Activity 活动,文本现在为亮红色。


将颜色应用于主题属性

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

  1. <resources>
  2. ...
  3. <style name="MyCustomTheme" ...>
  4. <item name="android:windowBackground">@color/my_custom_color</item>
  5. <item name="android:colorBackgroundCacheHint">@color/my_custom_color</item>
  6. </style>
  7. ...
  8. </resources>


使用自定义 Nine-Patch(九点图)按钮

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

定义九点图按钮的步骤
  • 保存图片至 /res/drawable/my_nine_patch.9.png
  • 定义一个新样式
  • 将新按钮样式应用于自定义主题的 buttonStyle 属性
  1. <resources>
  2. ...
  3. <style name="MyCustomButton" parent="android:Widget.Button">
  4. <item name="android:background">@drawable/my_nine_patch</item>
  5. </style>
  6. ...
  7. </resources>

应用主题

  1. <resources>
  2. ...
  3. <style name="MyCustomTheme" parent=...>
  4. ...
  5. <item name="android:buttonStyle">@style/MyCustomButton</item>
  6. </style>
  7. ...
  8. </resources>


Android 主题

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

因此,当样式作为主题应用时,Activity 活动或应用程序中的每个 视图 都将应用它支持的每个样式属性。例如,您可以将相同的 CustomFontStyle 样式应用于 Activity 活动的主题,然后该活动中的所有文本都将使用绿色的单空格字体。

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

例如 − 但是,如果您只想将主题应用于应用程序中的一个 Activity,那么只需将 android:theme 属性添加到 <Activity&gt; 标记中。

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

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

要了解与 Android 主题相关的概念,可以查看 主题演示实例


设置调色板的样式

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

上面的布局是基于 style.xml 文件设计的,它放置在 res/values/

  1. <resource>
  2. <style name="AppTheme" parent="android:Theme.Material">
  3. <item name ="android:color/primary">@color/primary</item>
  4. <item name ="android:color/primaryDark">@color/primary_dark</item>
  5. <item name ="android:colorAccent/primary">@color/accent</item>
  6. </style>
  7. <resource>

默认样式 & 主题

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

您可以看到以下 Android 风格和主题的源代码: