You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平板旋转至横屏时如何让应用保持竖屏显示?

实现平板横屏时应用保持竖屏样式居中显示的方案

核心实现逻辑:不强行固定系统屏幕方向,允许系统响应旋转操作,仅在应用层调整内容的显示尺寸和方向


第一步:修改Manifest配置

找到对应Activity的配置项,不要设置android:screenOrientation="portrait",添加配置变更监听避免旋转时Activity重建:

<activity
    android:name=".YourTargetActivity"
    android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize"
    android:windowBackground="@drawable/your_background_or_transparent"
    />

如果需要两侧显示系统壁纸,把windowBackground属性设为透明即可。


第二步:监听方向变化,动态调整窗口尺寸

重写Activity的onConfigurationChanged方法,横屏时调整窗口为竖屏比例居中显示,竖屏时恢复全屏即可:

Kotlin 示例代码

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    val windowMetrics = windowManager.currentWindowMetrics
    val maxBounds = windowMetrics.bounds
    val screenWidth = maxBounds.width()
    val screenHeight = maxBounds.height()

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 横屏时设置窗口为竖屏比例,这里取9:16常规竖屏比例,可自行调整
        val windowLayoutParams = window.attributes
        windowLayoutParams.width = (screenHeight * 9/16).toInt()
        windowLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT
        windowLayoutParams.gravity = Gravity.CENTER
        window.attributes = windowLayoutParams
        // 强制内容保持竖屏方向,不随系统旋转
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    } else {
        // 竖屏时恢复全屏显示
        val windowLayoutParams = window.attributes
        windowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT
        windowLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT
        window.attributes = windowLayoutParams
        // 恢复方向自动检测,监听下一次旋转操作
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
    }
}

效果说明

实现后效果和你提到的YouTube Studio app完全一致,横屏时应用内容保持竖屏比例居中显示,两侧未占用区域展示你设置的窗口背景或系统壁纸,示例效果如下:
YouTube Studio横屏显示示例


兼容注意事项

  • Android 12及以上系统可搭配Jetpack WindowManager使用,可完美适配折叠屏等多形态设备
  • 多页面统一生效可把上述逻辑封装到BaseActivity中全局处理
  • 需要完全禁止内容旋转可在根布局添加android:rotation="0"做双重保障

内容的提问来源于stack exchange,提问作者Rishin Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:15:04