在 Android 开发中,主题样式(Themes and Styles)用于定义应用的整体外观和感觉。常用的主题可以大致分为两类:使用 AppCompat 的主题和不使用 AppCompat 的主题 还有使用material库的MaterialComponents主题 。这两类主题的主要区别在于它们的兼容性和支持的 Android 版本。
AppCompat
的主题使用 AppCompat
主题的应用可以在较低版本的 Android 系统上获得现代的 Material Design
风格和特性。这些主题依赖于 Support Library
或 AndroidX
库。
AppCompat
主题Theme.AppCompat
AppCompat
主题。AppCompat
主题的父主题。Theme.AppCompat.Light
AppCompat
的浅色主题。<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here -->
</style>
Theme.AppCompat.Light.DarkActionBar
ActionBar
是深色的。ActionBar
,适合需要对比度更高的设计。<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here -->
</style>
Theme.AppCompat.DayNight
DayNight
主题,支持自动切换明亮和暗黑模式。<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here -->
</style>
Theme.AppCompat.Dialog
和 Theme.AppCompat.Dialog.Alert
AppCompat
主题。AlertDialog
或其他类型的对话框。<style name="AppTheme.Dialog" parent="Theme.AppCompat.Dialog">
<!-- Customize your dialog theme here -->
</style>
AppCompat
主题向下兼容至 Android 4.0(API Level 14),在旧版本的 Android 系统上也可以获得一致的用户体验。Toolbar
、CardView
、FloatingActionButton
等)。AppCompat
主题可以通过支持库中的样式、颜色和属性进行定制化。AppCompat
的主题这些主题是 Android 原生主题,直接依赖于 Android 系统本身的版本和功能,而不依赖于 Support Library
或 AndroidX
。它们通常与具体的 Android 系统版本相关,样式效果在不同版本上可能会有所不同。
Theme
Material Design
风格。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>
Theme.Holo.Light
Holo
主题。<style name="AppTheme" parent="android:Theme.Holo.Light">
<!-- Customize your theme here -->
</style>
Theme.Material
(API Level 21+)
Material Design
主题,是 Android 5.0(Lollipop)及以上版本的默认主题。<style name="AppTheme" parent="android:Theme.Material">
<!-- Customize your theme here -->
</style>
Theme.Material.Light
(API Level 21+)
Material
主题。Material Design
特性。<style name="AppTheme" parent="android:Theme.Material.Light">
<!-- Customize your theme here -->
</style>
Theme.Material.Light.DarkActionBar
(API Level 21+)
ActionBar
的 Material
主题。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 Library 或 AndroidX 提供的样式和属性进行高度定制化。 |
只能使用与系统版本相匹配的样式,定制化能力相对较弱。 |
在大多数情况下,推荐使用 AppCompat
主题,因为它提供了更好的向后兼容性和一致的用户体验。除非你只支持最新的 Android 版本或者有特定的原因选择使用原生主题,否则应该优先选择 AppCompat
主题。
Theme.MaterialComponents.DayNight.DarkActionBar
是一个 Material Components
主题,而不是 AppCompat
主题或 Android 默认主题。
Material Components
主题Material Components
主题是基于 Material Design
指南的主题,提供了对 Material Design
元素的支持,如 BottomAppBar
、MaterialButton
、TextInputLayout
等。这些主题是 Material Components for Android
库(com.google.android.material
)的一部分。
Theme.MaterialComponents.DayNight.DarkActionBar
是 Material Components
中的一个 DayNight 主题,支持动态切换浅色和深色模式,并且使用深色 ActionBar
。DayNight
主题支持动态切换浅色和深色模式,基于系统设置或用户首选项自动调整应用的主题。Material Components
组件支持:提供 Material Components
的所有最新样式和功能,比如 MaterialButton
、MaterialCardView
、MaterialToolbar
等。ActionBar
:在浅色主题中,ActionBar
默认是深色的,为应用的导航提供更好的对比度。AppCompat
和默认主题的区别AppCompat
主题:AppCompat
主题(如 Theme.AppCompat.Light
或 Theme.AppCompat.DayNight
)属于 AndroidX
提供的向后兼容主题,提供了 Material Design 风格的部分兼容性组件。Material Components
主题是专为实现完整的 Material Design 支持而设计的。android:Theme.Material
(Android 5.0+)。这些主题不需要额外的库依赖。Theme.MaterialComponents
主题的条件依赖 Material Components
库:要使用 Theme.MaterialComponents.DayNight.DarkActionBar
,需要在你的 build.gradle
中添加对 Material Components
库的依赖:
dependencies {
implementation 'com.google.android.material:material:1.10.0' // 使用最新版本
}
API 要求:Material Components
主题通常需要 Android 5.0(API Level 21)及以上版本的设备才能完全支持其特性。
Theme.MaterialComponents.DayNight.DarkActionBar
是一个 Material Components
主题,适合需要完整 Material Design 支持和动态主题切换功能的应用。它不属于 AppCompat
主题或 Android 默认主题,但它是构建现代 Android 应用的推荐主题之一,特别是当你使用 Material Design
组件和样式时。