Android中SearchView与状态栏重叠问题求助(fitsSystemWindows无效)
我来帮你搞定这个烦人的重叠问题!你已经给根布局加了android:fitsSystemWindows="true"但没起效,大概率是这个属性的作用层级或者Toolbar的配置没到位,试试下面这几个方案:
给自定义Toolbar添加
fitsSystemWindows属性
有时候根布局的fitsSystemWindows不会自动传递到子View,尤其是自定义Toolbar。直接给你的Toolbar加上android:fitsSystemWindows="true",这样它会自动计算状态栏高度并调整自身padding,让内部的SearchView避开状态栏区域。手动给Toolbar/内部LinearLayout添加状态栏高度的padding
如果你的Activity主题设置了透明状态栏(比如android:windowTranslucentStatus="true"或android:statusBarColor="@android:color/transparent"),fitsSystemWindows可能无法自动适配。这时候可以直接给包含SearchView的LinearLayout添加顶部padding:android:paddingTop="?android:attr/statusBarHeight"或者给整个Toolbar加上这个padding,确保所有内部内容都下移到状态栏下方。
用AppBarLayout包裹Toolbar
AppBarLayout是专门为系统窗口适配设计的组件,能更好地处理状态栏与ActionBar/Toolbar的关系。调整你的布局结构:<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true"> <!-- 你的自定义Toolbar --> <com.yourpackage.YourCustomToolbar android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 内部的两个LinearLayout和SearchView --> </com.yourpackage.YourCustomToolbar> </android.support.design.widget.AppBarLayout> <!-- 其他布局内容 --> </android.support.constraint.ConstraintLayout>(如果使用Material Components库,AppBarLayout的路径是
com.google.android.material.appbar.AppBarLayout)检查Activity代码中的全屏设置
如果你在Activity的onCreate方法里设置了全屏标志:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);这种情况下
fitsSystemWindows会失效,需要去掉这段代码,或者配合手动添加padding来适配。
内容的提问来源于stack exchange,提问作者Anbarasu Chinna

