Android样式和主题


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

定义样式

样式在XML资源中定义,该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 Style相关的概念,您可以查看样式演示示例。

风格继承

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

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

主题

将颜色应用于主题属性

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

主题

使用带按钮的自定义九个补丁

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

九个补丁按钮

Nine-Patch按钮示例

创建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>

主题

Android主题

希望你理解Style的概念,所以现在让我们试着去理解什么是 主题。主题只是应用于整个Activity或应用程序的Android样式,而不是单个View。

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

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

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

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

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

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

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

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

设置调色板的样式

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

主题

上面的布局是基于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”。您可以看到Android样式和主题的以下源代码

  • Android样式(styles.xml): https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml

  • Android主题(themes.xml): https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml