Android 5.0以上版本ActionBar内容下移问题修复咨询
修复Android 5.0+中ActionBar内容下移的问题
这问题我之前帮好几个开发者排查过,大概率是Android 5.0(API 21)引入的状态栏透明化机制和你的布局、主题配置冲突导致的——4.x系统没有这个特性,所以显示正常。下面给你几种针对性的修复方案:
情况1:不需要状态栏透明效果
如果你的App不需要状态栏透明,直接让ActionBar顶在状态栏下方,只需要做以下操作:
- 打开
values-v21/styles.xml,移除android:windowTranslucentStatus="true"这个属性; - 或者在你的
AppBarLayout标签里添加android:fitsSystemWindows="false",这样它就不会自动预留状态栏的高度空间了。
情况2:需要状态栏透明,同时Toolbar内容不偏移
如果要保留状态栏透明,且Toolbar的内容(比如标题、图标)不往下偏移,按这几步来:
- 确保
AppBarLayout设置了android:fitsSystemWindows="true",让它正确识别状态栏高度; - 把Toolbar的高度属性从
?android:actionBarSize改成?attr/actionBarSize——注意是不带android:前缀的,因为你用的是support库的Toolbar,系统自带的actionBarSize在5.0+和support库的数值可能有差异,会导致高度计算偏差; - 检查你的v21主题是否设置了透明状态栏,比如添加
android:statusBarColor="@android:color/transparent"。
修复后的布局示例
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay" android:fitsSystemWindows="true"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"/> </android.support.design.widget.AppBarLayout>
额外排查点
如果以上方案都没用,检查你的Activity代码里是否手动设置了状态栏透明的Flag:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
如果有,要么移除这段代码,要么确保和fitsSystemWindows属性配合使用。另外,如果外层布局是CoordinatorLayout,也要检查它的fitsSystemWindows设置,避免属性冲突。
内容的提问来源于stack exchange,提问作者Lekker
相关产品推荐
相关产品推荐

