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

Android 12无法正常锁定竖屏模式,寻求强制锁定方案

强制Android应用始终保持竖屏模式(适配Android 12+)

问题分析

Android 12及以上版本对屏幕方向控制逻辑做了调整,仅通过AndroidManifest.xml中的android:screenOrientation="portrait"配置,在平板、折叠屏或开启特定系统特性的设备上可能失效,无法完全锁定竖屏。

解决方案

1. 替换screenOrientation属性

将Manifest中的android:screenOrientation="portrait"替换为android:screenOrientation="sensorPortrait"。该属性基于竖屏方向的传感器数据维持竖屏状态,仅允许竖屏的正反两种显示(均为竖屏),在Android 12+上的稳定性优于portrait。

修改后的配置示例:

<activity
    android:name=".MainActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
    android:launchMode="singleTask"
    android:windowSoftInputMode="adjustResize"
    android:screenOrientation="sensorPortrait">
</activity>

2. 在Activity代码中主动锁定方向

若配置修改后仍有异常,可在Activity的onCreate方法中主动设置屏幕方向,强化锁定效果:

Java代码示例:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
    setContentView(R.layout.activity_main);
}

Kotlin代码示例:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
    setContentView(R.layout.activity_main)
}

3. 处理分屏/多窗口场景

如果应用不需要支持分屏,可在Manifest中添加android:resizeableActivity="false",避免系统在分屏模式下打破方向锁定:

<activity
    android:name=".MainActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
    android:launchMode="singleTask"
    android:windowSoftInputMode="adjustResize"
    android:screenOrientation="sensorPortrait"
    android:resizeableActivity="false">
</activity>

若需支持分屏,可在onConfigurationChanged中重新锁定方向:

Java代码示例:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}

Kotlin代码示例:

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
}

补充说明

  • portrait属性在Android 12+中,遇到平板桌面模式、折叠屏展开等场景时可能被系统忽略,而sensorPortrait会优先遵循传感器的竖屏状态,适配性更强。
  • 确保configChanges中包含orientation和screenSize,避免Activity因方向变化重启,影响锁定效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:45:13