如何让透明Toolbar始终显示在图片上方?
问题说明
已将Toolbar设置为透明背景,希望它保持在图片上方,尝试使用FrameLayout后问题仍未解决;同时无法让Activity内容在Toolbar后方保持可见。
解决方案
要实现Toolbar在图片顶层且后方内容可见,需从布局结构、层级控制两方面调整:
改用支持层级重叠的根布局
LinearLayout是线性排列布局,无法实现控件重叠,必须替换为FrameLayout或ConstraintLayout。推荐使用FrameLayout,它天然支持控件层级堆叠,先添加的控件处于底层,后添加的处于顶层。确保Toolbar处于顶层
将Toolbar放在FrameLayout的最后一个位置(FrameLayout中后添加的控件层级更高);若存在层级冲突,可给Toolbar设置android:elevation="4dp"(值需大于图片容器的elevation,默认Toolbar已有elevation,若图片容器也设置了该属性,需调整为更高值)。让图片容器填充整个屏幕
给图片所在的ConstraintLayout设置android:layout_width="match_parent"和android:layout_height="match_parent",让内容延伸到Toolbar下方,配合透明Toolbar就能显示后方内容。配置Activity主题
确保Activity使用NoActionBar主题,避免系统默认ActionBar干扰,在AndroidManifest.xml中设置:<activity android:name=".YourActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
修改后的布局代码
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 图片容器放在底层,填充整个屏幕 --> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <com.denzcoskun.imageslider.ImageSlider android:id="@+id/image_slider" android:layout_width="match_parent" android:layout_height="500dp"/> </androidx.constraintlayout.widget.ConstraintLayout> <!-- Toolbar放在顶层,透明背景 --> <androidx.appcompat.widget.Toolbar android:id="@+id/tool_bar" android:background="@android:color/transparent" android:backgroundTint="@android:color/transparent" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:elevation="4dp"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="C I N E M A" android:textColor="@color/white" android:textSize="24sp" /> </androidx.appcompat.widget.Toolbar> </FrameLayout>
关键说明
FrameLayout的控件顺序决定层级,图片容器先添加在底层,Toolbar后添加在顶层;透明Toolbar配合全屏的图片容器,自然就能显示后方的Activity内容;若仍存在层级问题,优先检查elevation属性,确保Toolbar的层级高于其他控件。
内容的提问来源于stack exchange,提问作者ben

