Android游戏仅截图侧边出现黑条且右侧UI显示不全适配求助
问题根源
你遇到的适配问题是Android高版本超长屏+系统窗口插入边距未适配导致的,Poco F3的屏幕比例为20:9(2.22),远高于旧机型默认的16:9(1.78),未配置长宽比支持的应用会被系统强制加侧边黑边适配。
优化方案
1. 配置Manifest支持超长屏与挖孔屏
在AndroidManifest.xml的<application>标签下添加以下配置,让应用可以占用全部屏幕区域:
<!-- 支持最大2.4的长宽比,覆盖当前所有主流超长屏 --> <meta-data android:name="android.max_aspect" android:value="2.4" /> <!-- 适配挖孔屏,允许内容延伸到挖孔区域 --> <meta-data android:name="android.notch_support" android:value="true" />
在游戏主Activity的主题配置中添加挖孔布局适配:
<item name="android:layoutInDisplayCutoutMode">shortEdges</item>
2. 修正屏幕尺寸与布局区域获取逻辑
你当前的代码存在冗余赋值问题,前面的版本判断逻辑写完后,又强制用getRealSize覆盖了宽高值,同时没有区分画面渲染尺寸和UI安全区域:
- 游戏画面渲染可以直接用
getRealSize获取的物理分辨率,保证全屏无黑边 - UI摆放需要减去系统的状态栏、导航栏、挖孔区域的边距,避免超出或被遮挡
修正后的尺寸获取参考代码:
public void setScreenSize(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point screenSize = new Point(); // 统一用getRealSize获取物理屏幕尺寸,用于游戏画面渲染 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { display.getRealSize(screenSize); } else { // 低版本直接用getSize,不存在超长屏适配问题 display.getSize(screenSize); } screenwidth = screenSize.x; screenheight = screenSize.y; Log.d("screensize", "w "+screenwidth); Log.d("screensize", "h "+screenheight); } // 额外获取UI安全区域边距,在Activity的onCreate中调用 public void setUiSafePadding(Activity activity) { activity.getWindow().getDecorView().setOnApplyWindowInsetsListener((v, insets) -> { int leftPadding = insets.getSystemWindowInsetLeft(); int rightPadding = insets.getSystemWindowInsetRight(); int topPadding = insets.getSystemWindowInsetTop(); int bottomPadding = insets.getSystemWindowInsetBottom(); // 所有UI摆放时左右分别偏移leftPadding、rightPadding,上下同理,避免超出屏幕 return insets.consumeSystemWindowInsets(); }); }
3. 黑条仅出现在截图的问题说明
运行时无黑边、截图有黑边是因为系统默认不会把未被应用占用的装饰区域绘制到显示画面中,截图时会捕获完整的屏幕图层,未被应用填充的区域就会显示为黑条,完成第一步的Manifest配置后即可消除该问题。
其他说明
不需要禁用用户的底部导航栏,适配WindowInsets即可同时兼容手势导航、虚拟按键、实体按键、挖孔等各种设备场景。
内容的提问来源于stack exchange,提问作者goatlikeK
相关产品推荐
相关产品推荐

