少于 1 分钟阅读 次阅读

AppCompatActivity是现代 Android 应用开发的基石,是几乎所有 Activity 都应该直接继承的类。

https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity

核心定义

AppCompatActivityAndroid Jetpack 支持库(具体是 androidx.appcompat 库)中的一个类。它的核心使命是向后兼容

简单来说,它允许在较旧版本的 Android 系统上,使用较新版本的 API 提供的功能和 UI 特性。


为什么它如此重要?(解决了什么问题)

想象一下,Android 5.0 引入了漂亮的 Material Design 界面风格。但你的应用还需要支持 Android 4.0 的用户。如果没有 AppCompatActivity,将面临一个困境:

  • 只用旧 API:应用在所有设备上外观和行为一致,但无法使用任何炫酷的新特性。
  • 直接用新 API:应用在旧系统上会直接崩溃,因为找不到新的类和方法。

AppCompatActivity 优雅地解决了这个问题。

  1. 运行时检测:当应用在旧设备(如 Android 4.4)上运行时,AppCompatActivity 会使用支持库中重新实现的对应组件。
  2. 新功能回退:当应用在新设备(如 Android 12)上运行时,它会自动委托给系统原生、性能更好的实现。

结果就是:开发者只需写一套代码,就能让应用在新旧设备上都能运行,并且在旧设备上也能获得近似新系统的现代外观和体验。


它为我们带来了哪些关键特性?

继承 AppCompatActivity 后,Activity 自动获得了以下强大能力:

  1. Material Design 外观:即使在古老的 Android 4.x 设备上,应用也能拥有 Material Design 风格的界面元素(如按钮、输入框、颜色主题)。
  2. 现代化的 Toolbar:这是它最著名的贡献之一:可以用功能强大的 Toolbar 完全替代传统的、定制性很差的系统 ActionBar。可以轻松地在 Toolbar 上添加图标、菜单、搜索框,甚至嵌套其他视图。
  3. Fragment 支持:完美兼容和管理 Fragment,这是构建灵活界面的关键组件。
  4. 深色主题支持:为应用实现深色/浅色主题切换提供了标准、简便的支持。
  5. 更好的本地化:对从右到左的布局语言提供了更好的支持。

Activity 的直接对比

特性 Activity (原生) AppCompatActivity (支持库)
兼容性 只能使用当前运行系统提供的 API。 向后兼容,将新 API 的功能带到旧系统。
外观 在旧系统上保持古老的 Holo 风格。 在所有支持的版本上提供统一的 Material Design 风格
Action Bar 使用旧的、难以定制的系统 ActionBar。 使用功能强大、高度可定制的 Toolbar
开发趋势 用于维护极其古老的遗留项目,或系统级应用。 现代 Android 开发的绝对标准,是 Google 官方推荐和项目模板的默认选择。

如何使用

  1. 添加依赖 (现代 Android 项目通常已默认包含):

    dependencies {
        implementation 'androidx.appcompat:appcompat:1.6.1'
    }
    
  2. 让 Activity 继承它

    public class MainActivity extends AppCompatActivity {
        // ... 你的代码
    }
    
  3. 在主题中使用 Theme.AppCompat 衍生物: 在 res/values/styles.xml 中,主题必须继承自 AppCompat 主题族。

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- 自定义你的主题属性 -->
    </style>
    

留下评论