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

    }
}
相关推荐
ZHANG13HAO1 小时前
Android 13 AOSP 内置 NekoTTS 中文免费商用 TTS 完整流程
android
许杰小刀6 小时前
ctfshow-web文件包含(web78-web86)
android·前端·android studio
恋猫de小郭11 小时前
Android 上为什么主题字体对 Flutter 不生效,对 Compose 生效?Flutter 中文字体问题修复
android·前端·flutter
三少爷的鞋11 小时前
不要让调用方承担你本该承担的复杂度 —— Android Data 层设计原则
android
李李李勃谦11 小时前
Flutter 框架跨平台鸿蒙开发 - 创意灵感收集
android·flutter·harmonyos
fengci.12 小时前
ctfshow其他(web396-web407)
android
JJay.13 小时前
Android 17 大屏适配变化解
android
TE-茶叶蛋14 小时前
结合登录页-PHP基础知识点解析
android·开发语言·php
alexhilton14 小时前
Jetpack Compose元球边缘效果
android·kotlin·android jetpack