我的问题:我希望我的应用程序只能以纵向模式运行。为此,我必须在每个活动的“ AndroidManifest”文件中定义“ android:screenOrientation=portrait
”。我不想为每个活动定义该行。因此,我想出了另一个解决方案,例如创建'Application
'的子类并注册activity's life cycle
,并在方法“ onActivityCreated
”中添加了
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
但是,现在的问题是“设备自动旋转已启用,并且当前设备位置为横向,并且当我打开应用程序时,每个活动最初都会启动两次。”有什么通用的解决方案吗?
答案 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.
});
}
}