如何在Android上更改方向时避免重新启动活动

时间:2010-12-31 06:33:32

标签: android rotation screen

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

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

13 个答案:

答案 0 :(得分:80)

有多种方法可以做到,但是如here所示,使用

android:configChanges="keyboardHidden|orientation|screenSize"

根据需要,允许您改为监听配置更改。然后,您可以通过覆盖onConfigurationChanged并致电setContentView来回复这些更改。

这就是我一直这样做的方式,但我有兴趣了解其他人的想法。

答案 1 :(得分:15)

在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>

答案 2 :(得分:11)

检查你的Android清单文件中你在活动上写了android:configChanges="orientation" ..

答案 3 :(得分:7)

我建议使用Fragments。您只需使用setRetainInstance(true)通知您要保留片段。

答案 4 :(得分:7)

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

答案 5 :(得分:7)

我尝试在活动代码中编写android:configChanges="keyboardHidden|orientation|screenSize"但不起作用。

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

答案 6 :(得分:6)

对于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
        }
    }

答案 7 :(得分:3)

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

android:configChanges="orientation|screenSize"

示例:

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

答案 8 :(得分:2)

要避免重新开始keyboardHidden|orientation - How to disable orientation change in Android?,请按照Android API指南 - Handling Runtime Changes使用应用类 - Activity restart on rotation Android

答案 9 :(得分:0)

在您的AndroidManifest.xml中声明

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

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

  

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

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

答案 10 :(得分:0)

对于我来说,当改变夜间模式时,只能将其写在清单中:

android:configChanges="uiMode"

答案 11 :(得分:0)

  

停止破坏旋转活动

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

答案 12 :(得分:0)

将其放在AndroidManifest.xml下

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

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