Android 9(API 28)中Toolbar不显示阴影问题求助
解决Android 9 Pie上Toolbar阴影不显示的问题
我来帮你搞定这个Toolbar阴影消失的问题!针对Android 9 Pie(API 28)的特性,结合你的布局代码,这里有几个可行的解决方案:
1. 调整fitsSystemWindows属性的位置
你的DrawerLayout设置了android:fitsSystemWindows="true",这会导致内部Toolbar的阴影被父布局的边界截断。建议把这个属性移到内部的LinearLayout上,同时移除DrawerLayout的该属性,额外添加android:clipChildren="false"确保阴影可以超出父布局边界显示:
修改后的activity_main.xml代码:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:openDrawer="start" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:clipChildren="false"> <include layout="@layout/toolbar"/> <FrameLayout android:id="@+id/fragment_main" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <include layout="@layout/navigation_drawer" /> </androidx.drawerlayout.widget.DrawerLayout>
2. 代码中动态设置Toolbar的Elevation
有时候XML中直接设置elevation在Android 9上可能不生效,试试在Activity的onCreate方法中动态设置:
import android.os.Build; import androidx.appcompat.widget.Toolbar; // ... Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // 用dp转像素确保适配不同屏幕 float elevation = getResources().getDimensionPixelSize(R.dimen.toolbar_elevation); toolbar.setElevation(elevation); }
记得在res/values/dimens.xml中添加对应的尺寸:
<dimen name="toolbar_elevation">4dp</dimen>
3. 检查主题设置是否影响阴影
如果你的App主题设置了透明状态栏(比如android:statusBarColor="@android:color/transparent"),可能会挤压Toolbar的阴影空间。可以尝试给Toolbar添加顶部内边距:
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:elevation="4dp" android:paddingTop="@dimen/status_bar_padding"> </androidx.appcompat.widget.Toolbar>
并在res/values/dimens.xml中定义基础值:
<dimen name="status_bar_padding">0dp</dimen>
在res/values-v21/dimens.xml中适配状态栏高度:
<dimen name="status_bar_padding">24dp</dimen>
优先尝试第一个方案,这是Android 9上Toolbar阴影消失最常见的解决办法,一般调整后就能看到阴影啦!
内容的提问来源于stack exchange,提问作者Akshdeep Singh




