事情是这样开始的,
1.我写了一个toolbar的公共layout,如下
<ImageButton android:id="@+id/returnLast" android:layout_width="@dimen/x20" android:layout_height="@dimen/x20" android:layout_alignParentStart="true" android:layout_centerHorizontal="false" android:layout_margin="@dimen/x5" android:background="@drawable/left" android:scaleType="fitXY" /> <ImageButton android:id="@+id/close" android:layout_width="@dimen/x20" android:layout_height="@dimen/x20" android:layout_alignParentEnd="true" android:layout_centerHorizontal="false" android:layout_margin="@dimen/x5" android:background="@drawable/close" android:scaleType="fitXY" />效果如下:
然后使用<include>标签,就可以在很多不同的布局上共用这个界面了
2.为了美观,设置了透明状态栏
(1)在BaseActivity的initToolBar(String title)方法中调用
//透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
(2)在公用toolbar的最外层布局中,加上
android:clipToPadding="true" android:fitsSystemWindows="true"
(3)就这么简单,接下来是见证奇迹的时刻!
诶???怎么扁了???
开始解决问题,
android:fitsSystemWindows="true"
根据以往的经验,这个属性用于让状态栏空出来不被页面内容占用,如果不加这个属性,内容就会挤占状态栏,去看看官网的解释吧
根据官方文档,如果某个View 的fitsSystemWindows 设为true,那么该View的padding属性将由系统设置,用户在布局文件中设置的
padding会被忽略。系统会为该View设置一个paddingTop,值为statusbar的高度。fitsSystemWindows默认为false。
padding会被忽略。系统会为该View设置一个paddingTop,值为statusbar的高度。fitsSystemWindows默认为false。
作者:flaming
链接:https://www.jianshu.com/p/5cc3bd23be7b
來源:简书
这样问题就很明显了,本来设置的
android:layout_margin="@dimen/x5“
在调用fitSystemWindows之后,toolbar新增了一个属性,paddingTop值为状态栏的高度,造成了变形,
那么只要把layout_marginTop属性去掉,只保留左边的边距,就可以正常显示了吧
android:layout_marginLeft="@dimen/x5",问题解决