我正在创建一个Android应用,我正在画布上绘制视图。当设备的方向改变时,活动将重新开始。我不想要它。
如何在方向更改时避免重新启动活动?
答案 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的新手) 我在网上看到了这段代码。