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

Android中实现半透明状态栏与Toolbar的技术求助

Android 半透明状态栏与Toolbar实现求助

我尝试了多种方法,始终无法实现半透明状态栏搭配Toolbar的效果,目标是达到下图红框标注的样式:

示例效果

以下是我的布局文件和样式文件代码,恳请帮忙解决:

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layout"
    android:orientation="vertical"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:minHeight="?attr/actionBarSize"
        android:background="@android:color/transparent">
    </androidx.appcompat.widget.Toolbar>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="24dp"
        android:background="@null"
        app:tabSelectedTextColor="@color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:tabIndicator="@drawable/custom_tab_indicator"
        app:tabIndicatorColor="#FF5722"
        app:tabIndicatorFullWidth="false" />

</LinearLayout>

样式文件

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.Tab" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <!-- Customize your theme here. -->
    </style>

</resources>

解决步骤

  1. 调整样式文件
    移除android:windowTranslucentStatus,改用半透明色设置android:statusBarColor,同时添加属性确保系统栏背景正常绘制:

    <style name="Theme.Tab" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- 保留原有品牌颜色属性 -->
        <!-- 状态栏设置 -->
        <item name="android:statusBarColor">#80000000</item> <!-- 半透明黑色,可按需调整透明度 -->
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <!-- Android 10+ 若背景偏暗,设置状态栏图标为浅色 -->
        <item name="android:windowLightStatusBar">false</item>
    </style>
    
  2. 修改布局文件

    • 移除根布局的android:fitsSystemWindows="true",让Toolbar延伸至状态栏下方:
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@+id/layout"
          android:orientation="vertical"
          tools:context=".MainActivity">
      
    • 给Toolbar添加上内边距,避免内容被状态栏遮挡:
      <androidx.appcompat.widget.Toolbar
          android:id="@+id/toolbar"
          app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
          android:layout_width="match_parent"
          android:layout_height="50dp"
          android:minHeight="?attr/actionBarSize"
          android:background="@android:color/transparent"
          android:paddingTop="?attr/statusBarHeight">
      
  3. 代码中绑定Toolbar(可选)
    在MainActivity的onCreate方法中完成Toolbar的设置:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar = findViewById<Toolbar>(R.id.toolbar)
        setSupportActionBar(toolbar)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:22:51