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

android:screenOrientation="portrait"已弃用,求强制竖屏有效解决方案

解决Android竖屏锁定问题(替代弃用的android:screenOrientation="portrait")

方案1:使用Manifest新属性(API 33+)

从Android 13(API level 33)开始,android:screenOrientation="portrait"被标记为弃用,官方推荐在Activity的Manifest配置中替换为android:activityOrientation="portrait":

<activity
    android:name=".YourActivity"
    android:activityOrientation="portrait">
</activity>

需要兼容低版本时,可以同时保留两个属性(低版本系统会自动忽略activityOrientation):

<activity
    android:name=".YourActivity"
    android:screenOrientation="portrait"
    android:activityOrientation="portrait">
</activity>

方案2:代码中强制锁定竖屏(全版本兼容)

如果Manifest配置无效,在Activity的onCreate方法中尽早调用以下代码,确保在视图加载前完成方向锁定:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 强制锁定竖屏,兼容所有Android版本
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.activity_main);
}

之前编程方式无效大概率是调用时机不对——必须在setContentView之前或同时执行,避免系统先处理旋转逻辑。

方案3:拦截配置变化阻止旋转

通过监听配置变化,避免系统因旋转重启Activity,同时强制转回竖屏:

  1. 先在Manifest中给Activity添加配置监听:
<activity
    android:name=".YourActivity"
    android:configChanges="orientation|screenSize|smallestScreenSize">
</activity>
  1. 重写onConfigurationChanged方法:
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // 检测到横屏时强制转回竖屏
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

方案4:应用全局锁定竖屏(所有Activity生效)

无需逐个配置Activity,在自定义Application类中注册生命周期回调,自动给每个Activity设置竖屏:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            // 其余生命周期方法可留空
            @Override public void onActivityStarted(@NonNull Activity activity) {}
            @Override public void onActivityResumed(@NonNull Activity activity) {}
            @Override public void onActivityPaused(@NonNull Activity activity) {}
            @Override public void onActivityStopped(@NonNull Activity activity) {}
            @Override public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
            @Override public void onActivityDestroyed(@NonNull Activity activity) {}
        });
    }
}

记得在Manifest中指定这个自定义Application:

<application
    android:name=".MyApp"
    ...>
</application>

关键注意事项

  • 如果应用开启了多窗口模式(默认android:resizeableActivity="true"),系统可能会忽略竖屏锁定,可在Manifest中添加android:resizeableActivity="false"禁用多窗口以确保生效。
  • Android 14+设备若上述方法无效,可尝试替换为setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT),该常量基于用户偏好的竖屏方向,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:07:09