Android-屏幕方向问题-仅需要纵向

时间:2018-07-04 05:54:45

标签: android android-activity

我的问题:我希望我的应用程序只能以纵向模式运行。为此,我必须在每个活动的“ AndroidManifest”文件中定义“ android:screenOrientation=portrait”。我不想为每个活动定义该行。因此,我想出了另一个解决方案,例如创建'Application'的子类并注册activity's life cycle,并在方法“ onActivityCreated”中添加了

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

但是,现在的问题是“设备自动旋转已启用,并且当前设备位置为横向,并且当我打开应用程序时,每个活动最初都会启动两次。”有什么通用的解决方案吗?

2 个答案:

答案 0 :(得分:0)

每个活动被启动2次,因为它首先以横向模式加载,然后调用onCreate()并在执行屏幕旋转代码行时再次旋转

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

唯一的解决办法是为清单中的每个活动提及screenOrientation =“ portrait”。这是唯一的方式,您可以强制以纵向模式开始创建活动。

答案 1 :(得分:0)

您可以通过以下简单方法为整个应用程序实现此目的。这将消除扩展肖像基类的开销以及在Portrait的每个活动中的清单声明。

为此,您的应用程序必须具有一个应用程序类。在其onCreate()中,当您的应用程序首次启动时,您需要注册一个ActivityLifecycleCallbacks对象(API级别14+)以接收活动生命周期事件的通知。

上面的回调使您有机会在任何活动开始(或停止或继续执行)时执行自己的代码。您可以将其用于新创建的活动上的setRequestedOrientation()。

class DummyApp extends Application {

@Override
public void onCreate() {
    super.onCreate();  

    // Register Callback
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        }
        // Other method of the ActivityLifecycleCallbacks as well you need to over-ride.
    });

  }
}