[英]Android - Screen Orientation Issue - Need only portrait
我的问题:我希望我的应用程序只能以纵向模式运行。 为此,我必须为每个活动在“ AndroidManifest”文件中定义“ android:screenOrientation=portrait
”。 我不想为每个活动定义该行。 因此,我想出了另一个解决方案,例如创建“ Application
”的子类并注册activity's life cycle
并在方法“ onActivityCreated
”中添加了以下代码:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
但是现在的问题是“启用了设备自动旋转功能,并且当前设备位置处于横向状态,当我打开应用程序时,每个活动最初都启动了两次。” 有什么通用的解决方案吗?
每个活动被启动2次,因为它首先以横向模式加载,并在执行屏幕旋转代码行时调用onCreate()并再次旋转
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
解决这个问题的唯一方法是为清单中的每个活动提及screenOrientation =“ portrait”。 这是您强制活动以纵向模式开始创建的唯一方法。
您可以通过以下简单方法为整个应用程序实现此目的。 这将消除扩展肖像基类以及在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.
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.