You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin开发中如何隐藏Fragment默认ActionBar并实现自定义ActionBar

解决方案

第一步:隐藏默认ActionBar

根据你的业务场景选择任意一种即可:

  • 全局隐藏(适合所有页面都使用自定义ActionBar的场景)
    打开res/values/themes.xml,将应用主题的父类修改为无ActionBar版本:
    <style name="Theme.你的应用名称" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- 其余原有主题配置保持不变 -->
    </style>
    
  • 仅目标Fragment隐藏(适合其余页面仍需要默认ActionBar的场景)
    在每个Fragment的onViewCreated方法中添加隐藏逻辑:
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        (requireActivity() as AppCompatActivity).supportActionBar?.hide()
    }
    

如果使用Navigation组件,可以统一配置OnDestinationChangedListener批量隐藏指定Fragment的ActionBar,避免重复代码


第二步:实现自定义ActionBar

1. 编写自定义ActionBar布局

新建layout/custom_action_bar.xml,按照需求添加标题、功能按钮等控件,示例如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:gravity="center_vertical"
    android:paddingHorizontal="16dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <ImageView
        android:id="@+id/btn_search"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:src="@drawable/ic_search"
        android:layout_marginEnd="20dp"/>

    <ImageView
        android:id="@+id/btn_more"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:src="@drawable/ic_more"/>

</LinearLayout>

2. 加载自定义ActionBar

根据需求选择加载方式:

  • 每个Fragment单独引入(适合不同Fragment的ActionBar样式差异较大的场景)
    在每个Fragment的根布局顶部添加include标签引入自定义布局:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <include layout="@layout/custom_action_bar"/>
    
        <!-- 原有Fragment布局内容 -->
    
    </LinearLayout>
    
    之后在Fragment的onViewCreated中直接绑定控件、设置点击逻辑即可:
    // 动态设置标题
    view.findViewById<TextView>(R.id.tv_title).text = "当前Fragment标题"
    // 功能按钮点击事件
    view.findViewById<ImageView>(R.id.btn_search).setOnClickListener {
        // 处理搜索逻辑
    }
    
  • 宿主Activity统一加载(适合多个Fragment共用一套ActionBar样式的场景)
    在宿主Activity的onCreate方法中添加如下代码:
    supportActionBar?.apply {
        displayOptions = DISPLAY_SHOW_CUSTOM
        setCustomView(R.layout.custom_action_bar)
        // 移除系统ActionBar默认边距
        (customView.parent as Toolbar).setContentInsetsAbsolute(0,0)
    }
    
    切换Fragment时,可以在底部导航切换回调或Navigation目的地变更监听中,动态修改ActionBar的标题、按钮显示状态。

注意事项

  • 若适配沉浸式状态栏,需要给自定义ActionBar根布局添加android:fitsSystemWindows="true"属性,避免内容和状态栏重叠
  • 自定义ActionBar高度建议使用?attr/actionBarSize,和系统默认高度保持一致,适配不同设备规格

内容的提问来源于stack exchange,提问作者Dheeraj Mehra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:39:01