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) // 自定义返回图标
        }

    }
}
相关推荐
我就是妖怪8 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
心平气和量大福大9 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
阿pin11 小时前
Android随笔-Serializable与Parcelable
android·serializable·parcelable
天空之城--11 小时前
Android 事件分发机制深度解析——原理、源码与实战综合总结
android
阿pin12 小时前
Android随笔-AIDL
android·开发语言·aidl
2501_9160074713 小时前
Bundle ID 注册与管理 App ID 创建指南 命名规则 权限开关与删除注意事项
android·ios·小程序·https·uni-app·iphone·webview
雨白13 小时前
面向对象六大基本原则实战:从零重构支持引擎切换的网络框架
android·架构
张赐荣13 小时前
Android TalkBack 无障碍优化: 为控件自定义转子导航动作
android·microsoft
天空之城--15 小时前
Android Flutter行业动态与学习参考(2026年8月)
android·flutter
quantdash_cc16 小时前
基于 QuantDash 5 分钟 K 线的网格交易策略参数网格搜索寻优实战
android·开发语言·pandas·量化·quantdash