【问题标题】:How to avoid restarting activity when orientation changes on Android如何避免在Android上的方向更改时重新启动活动
【发布时间】:2010-12-31 06:33:31
【问题描述】:

我正在创建一个在画布上绘制视图的 Android 应用。当设备的方向改变时,活动重新启动。我不想这样。

如何避免在方向改变时重新启动活动?

【问题讨论】:

    标签: android rotation screen


    【解决方案1】:

    有多种方法可以做到这一点,但如给定here,使用

    android:configChanges="keyboardHidden|orientation|screenSize"
    

    允许您监听配置更改。然后,您可以通过覆盖 onConfigurationChanged 并调用 setContentView 来响应这些更改。

    这就是我一直这样做的方式,但我很想知道其他人的想法。

    【讨论】:

    • 在我的情况下,我不应该使用 setContentView 并且 onConfigurationChanged 应该是空的并且只调用超级。
    【解决方案2】:

    像这样在 AndroidManifest.xml 中定义您的活动:

       <activity
            android:name="com.name.SampleActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:icon="@drawable/sample_icon"
            android:label="@string/sample_title"
            android:screenOrientation="portrait" >
        </activity>
    

    【讨论】:

    • 这是误导。 android:screenOrientation="portrait" 将始终强制纵向屏幕方向。不要包含此行。
    【解决方案3】:

    签入您在 Activity 上写入 android:configChanges="orientation" 的 android 清单文件。

    【讨论】:

    • 请注意,在大多数情况下,这不是您想要做的。对于大多数应用来说,正确的做法是在 onSaveInstanceState() 中记下您的配置,并在配置更改后将其恢复。
    • thanks.but 我正在画布上绘制按钮的 onclick 事件,所以如何保存画布的状态。
    【解决方案4】:

    android:configChanges="keyboardHidden|orientation" 添加到您的activity

    【讨论】:

      【解决方案5】:

      我尝试在活动标签中写入android:configChanges="keyboardHidden|orientation|screenSize",但不起作用。

      我尝试了很多方法,但没有任何效果,直到我为所有应用活动添加了android:configChanges="keyboardHidden|orientation|screenSize",并且效果很好。

      【讨论】:

        【解决方案6】:

        我建议使用 Fragments。您可以简单地使用setRetainInstance(true) 通知您要保留片段。

        【讨论】:

        • 这并不能阻止宿主活动和片段视图被破坏
        【解决方案7】:

        对于xamarin 用户,

        为避免在 Android 中更改方向时应用程序重启,添加此

        ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
        

        到所有Activity类的Activity属性。 例如,下面是我的演示代码

            [Activity(Label = "DemoApp", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)]
            public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
            {
                protected override void OnCreate(Bundle bundle)
                {
                //Some code here
                }
            }
        

        【讨论】:

        • 至少提到这是 Xamarin C# 代码而不是 Java
        • 谢谢。非常有帮助。请注意:答案是要将 ConfigurationChanges 添加到 MainActivity。实际上,您应该将此添加到项目中您希望阻止它重新启动的每个活动中。不仅仅是 MainActivity。
        【解决方案8】:

        将此添加到清单中的所有活动中。

        android:configChanges="orientation|screenSize"
        

        例子:

        <activity android:name=".activity.ViewActivity"
                android:label="@string/app_name"
                android:configChanges="orientation|screenSize"/>
        

        【讨论】:

          【解决方案9】:

          为避免在 keyboardHidden|orientation - How to disable orientation change in Android? 上重新启动
          请遵循 Android API 指南 - Handling Runtime Changes
          使用应用程序类 - Activity restart on rotation Android

          【讨论】:

            【解决方案10】:

            在你的 AndroidManifest.xml 中声明这个

            <activity android:name=".complex_examples.VideoPlayerActivity"
                        android:configChanges="keyboard|keyboardHidden|orientation
                                              |screenSize|screenLayout|smallestScreenSize|uiMode"
                        android:launchMode="singleTop"/>
            

            但要小心Android Developers Documentation 说只有在没有更好的选择时才应该这样做。

            注意:应避免使用此属性,仅用作最后 采取。请阅读处理运行时更改以获取更多信息 关于如何正确处理由于配置更改而导致的重启。

            如果您确定要这样做,您可以在onConfigurationChanged()方法中自行处理配置更改。

            【讨论】:

              【解决方案11】:

              停止破坏旋转中的活动

              `android:configChanges="keyboardHidden|orientation|screenSize"`
              

              【讨论】:

                【解决方案12】:

                只需为清单文件中的所有应用活动添加 android:configChanges="keyboardHidden|orientation|screenSize"

                【讨论】:

                  【解决方案13】:

                  对我来说,当改变夜间模式时,只在清单中写下这个:

                  android:configChanges="uiMode"
                  

                  【讨论】:

                    【解决方案14】:

                    把这个放在AndroidManifest.xml下

                    <activity android:name=".MainActivity"android:configChanges="orientation|screenSize">
                    

                    请让我知道它是否有效(它对我有用,我是 Android 工作室的新手) 我在网上看到了这段代码。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-03-07
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-07-14
                      • 2011-07-17
                      相关资源
                      最近更新 更多