为所有活动设置固定方向
Set orientation fixed for all activities
我知道有两种方法可以通过编程方式将 Activity
的方向设置为横向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
或在清单中:
android:orientation="landscape"
目前,我在超类中使用第一个,因为我有很多(子)活动,我都希望它们始终处于横向状态。然而,这使
onCreate
被调用两次,这会导致其他问题。在使用Manifest-route时,我必须将它分别应用于所有活动,这无疑会导致以后漏掉一个(更不用说所有代码复制了)。
有没有办法将 android:orientation="landscape"
应用到我应用中的所有活动?
在清单中,为您的所有活动设置此项:
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
让我解释一下:
使用 android:configChanges="orientation" 你告诉 Android 你将负责方向的改变。
android:screenOrientation="portrait" 你设置默认方向模式。
OnCreate 将在创建 activity 时调用。当您在代码中设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Activity 会重新创建自己,因此您无法真正阻止它。 (也许你可以,试一试,当你得到解决方案时尝试发布..)
你必须这样处理你的东西
可能的解决方案
android:configChanges="keyboardHidden|orientation|screenSize"
in manifiest in tag
或
Add it directly in your manifest the orientation property
或者您可以尝试为所有活动制作 "superclass" 并从 "superclass" 扩展。
public abstract class SuperActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
我为应用程序中的所有活动设置了屏幕方向 class。
import android.app.Application
import android.os.Bundle
import android.app.Activity
import android.content.pm.ActivityInfo
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
setListenerToCheckActivitySettings()
}
private fun setListenerToCheckActivitySettings() {
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivityDestroyed(activity: Activity) {}
})
}
}
我知道有两种方法可以通过编程方式将 Activity
的方向设置为横向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
或在清单中:
android:orientation="landscape"
目前,我在超类中使用第一个,因为我有很多(子)活动,我都希望它们始终处于横向状态。然而,这使
onCreate
被调用两次,这会导致其他问题。在使用Manifest-route时,我必须将它分别应用于所有活动,这无疑会导致以后漏掉一个(更不用说所有代码复制了)。
有没有办法将 android:orientation="landscape"
应用到我应用中的所有活动?
在清单中,为您的所有活动设置此项:
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
让我解释一下:
使用 android:configChanges="orientation" 你告诉 Android 你将负责方向的改变。 android:screenOrientation="portrait" 你设置默认方向模式。
OnCreate 将在创建 activity 时调用。当您在代码中设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Activity 会重新创建自己,因此您无法真正阻止它。 (也许你可以,试一试,当你得到解决方案时尝试发布..)
你必须这样处理你的东西
可能的解决方案
android:configChanges="keyboardHidden|orientation|screenSize" in manifiest in tag
或
Add it directly in your manifest the orientation property
或者您可以尝试为所有活动制作 "superclass" 并从 "superclass" 扩展。
public abstract class SuperActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
我为应用程序中的所有活动设置了屏幕方向 class。
import android.app.Application
import android.os.Bundle
import android.app.Activity
import android.content.pm.ActivityInfo
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
setListenerToCheckActivitySettings()
}
private fun setListenerToCheckActivitySettings() {
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivityDestroyed(activity: Activity) {}
})
}
}