如果我将 minAPI 设置为 21,我是否需要 AppCompat?

If I set minAPI to 21, do I need AppCompat?

我决定将 Android 的最低 API 版本设置为 21,但这是否意味着不再使用 AppCompat 毫无意义?只使用普通 Material 设计/没有 AppCompat / 等?

不,您应该始终使用 AppCompat。这可确保您的应用在所有 API 级别上已经保持一致,并且您可以访问所有新的 API(例如使用仅在 API 中引入的 Colored buttons 23).

许多其他库,例如 Design Support Library 也需要使用 AppCompat。

一个需要用到appcompat-v7的场景是如果你想要一个action bar,而你的minSdkVersion在11以下,目前没有常用和维护的appcompat-v7 的替代方案。

否则,appcompat-v7是可以考虑的,但不是必须的,使用它有一定的成本:

  • 脆弱性增加,许多小部件被子类取代。您的布局可能需要 EditText,但 AppCompatActivity 会默默地用 AppCompatEditText 替换它,后者扩展了 EditText。在理想世界中,这不会造成任何问题。然而,设备制造商有扰乱标准小部件实现的历史。创建标准小部件的子类可能会绕过设备制造商引入的错误。我个人 运行 对此非常感兴趣,特别是 EditText

  • 增加了应用程序大小。 appcompat-v7 使您的 APK 大小增加约 1MB。正如 Google 喜欢指出的那样,开发人员应该积极尝试减小他们的 APK 大小,因为一些用户必须按 MB 为带宽付费(因此下载 APK 是有成本的),并且一些设备在存储方面非常吝啬。

  • 强制Material 设计美学。 Google 希望所有应用都使用 Material 设计,出于他们自己的政治原因。 Material 设计有拥护者也有反对者。并非所有设计师都想遵循 Material 设计。 appcompat-v7 可能会使实施非 Material 设计变得更加困难,具体取决于与 Google 规范的所需偏差。

  • 预装应用程序的视觉二分法。 Android 4.x 设备的用户习惯于 Holo 主题,许多非 Google 预装应用程序将具有基于 Holo 的主题。对于碰巧使用 Google 应用程序的用户,他们已经接触过 Material 设计,现在可能已经习惯了。当然,Android 5.0+ 在 Android 设备生态系统中所占的比例正在不断增长。但是,与三星、LG、索尼、HTC 等将在其 Android 4.x 设备上安装的应用程序相比,Material Design 应用程序显得格格不入。目前尚不清楚 Material 设计是否在某种程度上如此出色,以至于值得这些设备上的用户产生差异。

这些问题中有任何一个是阻碍吗?不,所以,如果您想使用 appcompat-v7,请直接使用。但是,请理解 appcompat-v7 是一种选择,应该有意识地做出选择。