ActionBar 和 Toolbar

1 基本概念和历史背景

1.1 ActionBar(Android 3.0 原生支持)

Android 3.0 引入原生顶部导航栏,提供标题、导航按钮、操作按钮等功能。集成方式依赖 Activity 的 setActionBar() 方法:

局限性:

  • 样式和布局定制性低,只能固定在顶部,无法满足复杂的设计需求;
  • 在 Android 5.0(Lollipop)后逐渐被 Toolbar 替代;

默认配置:

themes.xml 文件:

xml 复制代码
<resources xmlns:tools="http://schemas.android.com/tools">

    <style name="SuperUI" parent="Theme.Material3.DayNight">

    </style>

</resources>

在清单文件中配置主题:

xml 复制代码
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/SuperUI">
  	
  	......

</application>
1.2 Toolbar(Android 5.0+ 推荐方案)

作为 ActionBar 的替代品,是 android.appcompat.widget.Toolbar 包中的自定义 View。作为普通的 View 嵌入布局,通过 setSupportActionBar() 关联。

优势:

  • 完全自定义布局(可以在顶部、底部、侧边)、样式、动画和交互逻辑;
  • 支持跨版本兼容(通过 AppCompact 库在低版本系统中使用);

2 Toolbar 的核心用法和示例

2.1 移除 ActionBar 相关的主题属性

themes.xml 文件:

xml 复制代码
<!-- Base application theme. -->
<style name="SuperUI.NoActionBar" parent="Theme.Material3.DayNight.NoActionBar">

</style>

在清单文件中配置:

xml 复制代码
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/SuperUI">
  	
  	......

</application>
2.2 布局集成

在 XML 布局中添加 Toolbar:

xml 复制代码
<androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/holo_blue_bright"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
2.3 在 Activity 中关联 Toolbar
kotlin 复制代码
class TestActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 获取 Toolbar 实例
        val toolbar = findViewById<Toolbar>(R.id.toolbar)
        // 重点:设置为 ActionBar
        setSupportActionBar(toolbar)

        supportActionBar?.apply {
            title = "主界面"
            subtitle = "欢迎使用"
            setDisplayHomeAsUpEnabled(true) // 显示返回箭头
            setHomeAsUpIndicator(R.drawable.arrow_back) // 自定义返回图标
        }

    }
}
相关推荐
圆号本昊2 小时前
Flutter Android Live2D 2026 实战:模型加载 + 集成渲染 + 显示全流程 + 10 个核心坑( OpenGL )
android·flutter·live2d
冬奇Lab3 小时前
ANR实战分析:一次audioserver死锁引发的系统级故障排查
android·性能优化·debug
冬奇Lab4 小时前
Android车机卡顿案例剖析:从Binder耗尽到单例缺失的深度排查
android·性能优化·debug
ZHANG13HAO4 小时前
调用脚本实现 App 自动升级(无需无感、允许进程中断)
android
圆号本昊5 小时前
【2025最新】Flutter 加载显示 Live2D 角色,实战与踩坑全链路分享
android·flutter
小曹要微笑6 小时前
MySQL的TRIM函数
android·数据库·mysql
mrsyf7 小时前
Android Studio Otter 2(2025.2.2版本)安装和Gradle配置
android·ide·android studio
DB虚空行者7 小时前
MySQL恢复之Binlog格式详解
android·数据库·mysql
liang_jy9 小时前
Android 事件分发机制(一)—— 全流程源码解析
android·面试·源码