小米Note 12s设备中Activity自动全屏导致界面重叠的问题求助
嗨,我之前也帮朋友排查过类似的小米设备适配问题,大概率是小米系统的默认设置或者主题相关的特性搞的鬼!你没写任何全屏代码却出现这个情况,完全不用慌,试试下面这几个方向:
强制声明Activity的系统UI显示策略
有些小米机型会默认给第三方App开启沉浸式状态栏或全屏显示优化,尤其是当App主题没明确指定状态栏、导航栏的显示规则时。你可以在Activity的onCreate方法里(或者BaseActivity统一处理)加上这段代码,明确告诉系统不要自动修改显示模式:// Kotlin 示例 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 要是想直接固定显示状态栏、导航栏,也可以用这个: // window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)用Java的话代码类似:
// Java 示例 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);检查主题配置,避开厂商定制特性
打开你的AndroidManifest.xml,看看Activity对应的主题是不是继承了小米的特殊主题,或者有没有不小心加了<item name="android:windowFullscreen">true</item>这类属性。尽量用Android官方的AppCompat或Material主题,比如Theme.MaterialComponents.Light.NoActionBar,减少系统自动修改的可能。给布局加上适配系统窗口的属性
打开你的布局文件,给根容器加上android:fitsSystemWindows="true"属性,这个属性能让布局自动避开状态栏和导航栏的区域,很多时候直接就能解决上下区域重叠的问题:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <!-- 你的其他布局内容 --> </LinearLayout>临时排查:检查设备的系统设置
你也可以先手动测试下:打开小米Note 12s的「设置」→「显示」→「全屏显示」,看看你的App是不是被默认勾选了全屏显示,取消后再运行App试试。不过作为开发者,还是优先用代码适配,别让用户手动操作啦。
我之前用这些方法解决过好几个小米机型的类似适配问题,你可以一个个试,应该能搞定!
内容来源于stack exchange

