使用 AppCompat 时,我们应该期望应用程序采用全息设计还是 material 设计

Should we expect the app in holo design or material design when using AppCompat

我有一个在 Android 2.3 及更高版本上运行的应用程序。

最近,我正在按照 What are the common issues when migrating from ActionBarSherlock to ActionBarCompat?

的指南将其从 SherlockActionBar 迁移到 AppCompat

这是我到目前为止所做的。

升级SDK版本

更改 SDK
<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="21" />

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="22" />

主题升级

更改主题
Theme.Sherlock.Light.DarkActionBar

Theme.AppCompat.Light.DarkActionBar

代码更新

遵循 What are the common issues when migrating from ActionBarSherlock to ActionBarCompat? 中的代码更改指南。

请注意,我仍然坚持 ActionBar 而不是 Toolbar。最终,我会将代码移动到Toolbar。由于迁移是一项巨大的工程。我宁愿一点一点地做。

我的期望是

  1. 在 Android 2.3 到 Android 4 上运行的应用程序,应该有老派的全息设计。我希望该应用程序看起来与使用 SherlockActionBar 构建的应用程序相同。
  2. 在 Android 5+ 上运行的应用程序将采用新的 material 设计。

但是,对于 2.3 应用程序,迁移前后的应用程序是这样的。

迁移前

迁移后

迁移后好像可以观察到

  1. 操作栏高度更高。
  2. 对话框确定取消按钮,已从3D变为Material平面。

我想知道,当我们针对 AppCompat 构建并以最新的 SDK 22 为目标时,对旧应用程序(在 2.3 至 4+ 上运行的应用程序)的正确期望应该是什么?它们应该看起来像 Material 应用程序,还是 Holo 应用程序?

来自 AppCompat 的 Support Library Features 部分:

This library adds support for the Action Bar user interface design pattern. This library includes support for material design user interface implementations.

所以您看到的是预期的行为 - AppCompat 旨在将 ActionBar 和 Material 引入所有 API 7 及更高版本的设备。

在 AppCompat 的第 21 版与 Android Lollipop (API 21) 一起发布之前,AppCompat 确实提供了带有 Holo 主题的 ActionBar。但是,它从来没有为其他组件设置样式,只有 ActionBar 本身。