如何在Android中全局禁止屏幕旋转?无需逐个配置Activity
全局禁止应用屏幕旋转的实现方法
不需要每个Activity都在Manifest里单独配置,有两种常用的全局实现方式:
方法一:自定义BaseActivity(推荐方案)
- 先创建一个基类Activity,让所有业务Activity都继承它:
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 锁定为竖屏,要锁定横屏就改用SCREEN_ORIENTATION_LANDSCAPE setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }
- 之后你的所有Activity(比如MainActivity、DetailActivity)都继承这个BaseActivity,不用再重复写屏幕方向的配置逻辑。
方法二:通过Application全局监听Activity生命周期
如果不想改动现有Activity的继承关系,用这个方法更方便:
- 自定义Application类,注册Activity生命周期回调,在每个Activity创建时统一设置屏幕方向:
public class MyApplication 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:
<application android:name=".MyApplication" <!-- 其他原有配置 --> > <!-- Activity配置 --> </application>
例外处理
如果某个Activity需要允许旋转,直接在该Activity的onCreate方法里覆盖全局设置就行:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 恢复系统默认的旋转行为 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); }
内容的提问来源于stack exchange,提问作者Sumita Das
相关产品推荐
相关产品推荐

