我正在创建一个Android应用程序,其中我在画布上绘制视图。当设备的方向发生变化时,活动会重新启动,而我不希望它重新启动。
我该如何避免在设备方向发生变化时重新启动活动?
有很多方法可以做到这一点,但是如此处所示,使用
android:configChanges="keyboardHidden|orientation|screenSize"
让你监听配置更改,你可以通过重写onConfigurationChanged
并调用setContentView
来响应这些更改。
这是我一直在使用的方法,但我很想知道其他人的想法。
在 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"
将始终强制使用纵向屏幕方向。不要包含这行代码。 - Daniel C Jacobs请检查您的Android清单文件中是否在活动上编写了android:configChanges="orientation"
。
对于 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
}
}
我尝试在activity标签中写入android:configChanges="keyboardHidden|orientation|screenSize"
,但它不起作用。
我尝试了很多方法,但是直到我在所有应用程序活动中添加了android:configChanges="keyboardHidden|orientation|screenSize"
,它才能完美地工作。
activity
中添加android:configChanges="keyboardHidden|orientation"
。setRetainInstance(true)
来通知你想要保留你的Fragment。在清单文件中为所有活动添加以下内容。
android:configChanges="orientation|screenSize"
例子:
<activity android:name=".activity.ViewActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"/>
<activity android:name=".complex_examples.VideoPlayerActivity"
android:configChanges="keyboard|keyboardHidden|orientation
|screenSize|screenLayout|smallestScreenSize|uiMode"
android:launchMode="singleTop"/>
但要注意,Android开发者文档指出,只有在没有更好的选择时才应该这样做。
注意:应避免使用此属性,并仅在没有其他选择时使用。请阅读“处理运行时更改”以获取有关如何正确处理由于配置更改而导致的重启的更多信息。
如果您确定要这样做,可以在onConfigurationChanged()方法中自行处理配置更改。