Android API 23及以上移除ActionBar阴影:已尝试方案无效求解决
解决Android API23+移除ActionBar阴影的问题
嘿,我明白你遇到的麻烦了——用了android:elevation="0dp"和旧的windowContentOverlay都没去掉ActionBar的阴影,这是因为你用的是AppCompat主题,得用对应的兼容属性才行!
为什么之前的方法没用?
android:elevation是系统原生ActionBar的属性,但你继承的是Theme.AppCompat.Light,AppCompat有自己的一套属性来控制ActionBar的阴影,系统属性在这里不生效。android:windowContentOverlay是API21之前用来设置阴影的旧属性,API21及以后已经被elevation机制取代了,所以在API23+里完全没用。
正确的解决方案
情况1:使用默认的AppCompat ActionBar
直接在主题里替换成AppCompat专属的actionBarElevation属性,去掉android:前缀:
<style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- 你的原有属性 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!-- 关键:使用AppCompat的actionBarElevation属性 --> <item name="actionBarElevation">0dp</item> </style>
情况2:使用自定义Toolbar作为ActionBar
如果你在布局里用了Toolbar并通过setSupportActionBar()设置为ActionBar,那需要直接给Toolbar设置elevation:
方法A:在布局文件中直接设置
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:elevation="0dp" />
方法B:通过主题样式统一设置
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 你的原有属性 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!-- 自定义Toolbar样式 --> <item name="toolbarStyle">@style/CustomToolbarStyle</item> </style> <style name="CustomToolbarStyle" parent="Widget.AppCompat.Toolbar"> <item name="elevation">0dp</item> </style>
额外检查点
如果还是没生效,看看有没有这些情况:
- 代码里有没有动态调用
ActionBar.setElevation()或者Toolbar.setElevation()设置了阴影? - 你的主题有没有被其他子主题或者布局中的样式覆盖?
内容的提问来源于stack exchange,提问作者Dhiraj Borana
相关产品推荐
相关产品推荐

