• Android Video Tutorials

Android - 样式和主题



一个样式资源定义了 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>的值可以是关键字字符串、十六进制颜色、对其他资源类型的引用或其他值,具体取决于样式属性。

使用样式

定义样式后,您可以使用style属性在 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 样式相关的概念,您可以查看样式演示示例

样式继承

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"
   />

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

Theme

将颜色应用于主题属性

然后,您的颜色资源可以应用于某些主题属性,例如窗口背景和主要文本颜色,方法是在自定义主题中添加<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

使用自定义九宫格与按钮

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

Nine Patch Button

九宫格按钮示例

创建九宫格按钮的步骤

  • 将此位图保存为 /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 主题

希望您理解了样式的概念,那么现在让我们尝试了解什么是主题。主题不过是在整个 Activity 或应用程序(而不是单个 View)上应用的 Android 样式。

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

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

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

但是,如果您希望将主题应用于应用程序中的一个 Activity,则只需将 android:theme 属性添加到<activity>标签中。例如:

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

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

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

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

设置颜色调色板

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

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 样式和主题的源代码:

广告