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
相关产品推荐
相关产品推荐

