Logo
Android Theme主题的区分

在 Android 开发中,主题样式(Themes and Styles)用于定义应用的整体外观和感觉。常用的主题可以大致分为两类:使用 AppCompat 的主题不使用 AppCompat 的主题 还有使用material库的MaterialComponents主题 。这两类主题的主要区别在于它们的兼容性和支持的 Android 版本。

1. 使用 AppCompat 的主题

使用 AppCompat 主题的应用可以在较低版本的 Android 系统上获得现代的 Material Design 风格和特性。这些主题依赖于 Support LibraryAndroidX 库。

常见的 AppCompat 主题

  1. Theme.AppCompat

    • 基础 AppCompat 主题。
    • 可以用于定义应用的基本外观和风格,并作为其他 AppCompat 主题的父主题。
    • 用法:通常不直接使用此主题,而是使用其派生主题。
  2. Theme.AppCompat.Light

    • AppCompat 的浅色主题。
    • 默认有一个浅色背景,适合需要明亮外观的应用。
    • 用法
      <style name="AppTheme" parent="Theme.AppCompat.Light">
          <!-- Customize your theme here -->
      </style>
      
  3. Theme.AppCompat.Light.DarkActionBar

    • 浅色主题,ActionBar 是深色的。
    • 为应用提供了一个浅色背景和深色的 ActionBar,适合需要对比度更高的设计。
    • 用法
      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
          <!-- Customize your theme here -->
      </style>
      
  4. Theme.AppCompat.DayNight

    • DayNight 主题,支持自动切换明亮和暗黑模式。
    • 根据系统设置或时间自动在浅色和深色主题之间切换,适合希望支持夜间模式的应用。
    • 用法
      <style name="AppTheme" parent="Theme.AppCompat.DayNight">
          <!-- Customize your theme here -->
      </style>
      
  5. Theme.AppCompat.DialogTheme.AppCompat.Dialog.Alert

    • 用于对话框的 AppCompat 主题。
    • 提供对话框的样式,可用于 AlertDialog 或其他类型的对话框。
    • 用法
      <style name="AppTheme.Dialog" parent="Theme.AppCompat.Dialog">
          <!-- Customize your dialog theme here -->
      </style>
      

优点

2. 不使用 AppCompat 的主题

这些主题是 Android 原生主题,直接依赖于 Android 系统本身的版本和功能,而不依赖于 Support LibraryAndroidX。它们通常与具体的 Android 系统版本相关,样式效果在不同版本上可能会有所不同。

常见的原生主题

  1. Theme

    • 基础的原生 Android 主题。
    • 这是 Android 早期版本(如 Android 2.x 系列)的默认主题,没有现代的 Material Design 风格。
    • 通常不建议在新应用中使用。
  2. Theme.Holo

    • Holo 主题是 Android 3.x(Honeycomb)和 Android 4.x(Ice Cream Sandwich 和 Jelly Bean)的默认主题。
    • 提供了一个相对较现代的外观,但缺少 Material Design 的视觉效果。
    • 用法
      <style name="AppTheme" parent="android:Theme.Holo">
          <!-- Customize your theme here -->
      </style>
      
  3. Theme.Holo.Light

    • 浅色版的 Holo 主题。
    • 提供浅色的背景,具有 Holo 样式的控件外观。
    • 用法
      <style name="AppTheme" parent="android:Theme.Holo.Light">
          <!-- Customize your theme here -->
      </style>
      
  4. Theme.Material(API Level 21+)

    • Material Design 主题,是 Android 5.0(Lollipop)及以上版本的默认主题。
    • 包含丰富的动画、阴影效果和新的控件样式。
    • 需要 Android 5.0 或更高版本,不能向下兼容。
    • 用法
      <style name="AppTheme" parent="android:Theme.Material">
          <!-- Customize your theme here -->
      </style>
      
  5. Theme.Material.Light(API Level 21+)

    • 浅色版的 Material 主题。
    • 适合需要明亮外观的应用,同时仍支持所有 Material Design 特性。
    • 用法
      <style name="AppTheme" parent="android:Theme.Material.Light">
          <!-- Customize your theme here -->
      </style>
      
  6. Theme.Material.Light.DarkActionBar(API Level 21+)

    • 浅色背景但带有深色 ActionBarMaterial 主题。
    • 提供明亮的外观,同时具有深色的 ActionBar,适合希望提供对比色的应用设计。
    • 用法
      <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
          <!-- Customize your theme here -->
      </style>
      

优点

总结

区别 AppCompat 主题 原生主题
向后兼容性 支持向后兼容到较早的 Android 版本(API 14+)。 仅支持与主题对应的 Android 系统版本及以上的设备。
Material Design 支持 在所有支持版本上提供 Material Design 支持。 仅在 Android 5.0+(Lollipop)以上支持 Material Design 主题。
ActionBar/Toolbar 支持 内置支持 Toolbar 和现代的 ActionBar 需要使用传统的 ActionBar,并且在较旧的版本上效果不一致。
主题自定义能力 可以通过 Support LibraryAndroidX 提供的样式和属性进行高度定制化。 只能使用与系统版本相匹配的样式,定制化能力相对较弱。

推荐使用

在大多数情况下,推荐使用 AppCompat 主题,因为它提供了更好的向后兼容性和一致的用户体验。除非你只支持最新的 Android 版本或者有特定的原因选择使用原生主题,否则应该优先选择 AppCompat 主题。

Theme.MaterialComponents.DayNight.DarkActionBar 是一个 Material Components 主题,而不是 AppCompat 主题或 Android 默认主题。

1. Material Components 主题

Material Components 主题是基于 Material Design 指南的主题,提供了对 Material Design 元素的支持,如 BottomAppBarMaterialButtonTextInputLayout 等。这些主题是 Material Components for Android 库(com.google.android.material)的一部分。

特点:

2. AppCompat 和默认主题的区别

3. 使用 Theme.MaterialComponents 主题的条件

4. 总结

Theme.MaterialComponents.DayNight.DarkActionBar 是一个 Material Components 主题,适合需要完整 Material Design 支持和动态主题切换功能的应用。它不属于 AppCompat 主题或 Android 默认主题,但它是构建现代 Android 应用的推荐主题之一,特别是当你使用 Material Design 组件和样式时。