【发布时间】:2010-12-31 06:33:31
【问题描述】:
我正在创建一个在画布上绘制视图的 Android 应用。当设备的方向改变时,活动重新启动。我不想这样。
如何避免在方向改变时重新启动活动?
【问题讨论】:
我正在创建一个在画布上绘制视图的 Android 应用。当设备的方向改变时,活动重新启动。我不想这样。
如何避免在方向改变时重新启动活动?
【问题讨论】:
有多种方法可以做到这一点,但如给定here,使用
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" 将始终强制纵向屏幕方向。不要包含此行。
签入您在 Activity 上写入 android:configChanges="orientation" 的 android 清单文件。
【讨论】:
将android:configChanges="keyboardHidden|orientation" 添加到您的activity
【讨论】:
我尝试在活动标签中写入android:configChanges="keyboardHidden|orientation|screenSize",但不起作用。
我尝试了很多方法,但没有任何效果,直到我为所有应用活动添加了android:configChanges="keyboardHidden|orientation|screenSize",并且效果很好。
【讨论】:
我建议使用 Fragments。您可以简单地使用setRetainInstance(true) 通知您要保留片段。
【讨论】:
对于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
}
}
【讨论】:
将此添加到清单中的所有活动中。
android:configChanges="orientation|screenSize"
例子:
<activity android:name=".activity.ViewActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"/>
【讨论】:
为避免在 keyboardHidden|orientation - How to disable orientation change in Android? 上重新启动
请遵循 Android API 指南 - Handling Runtime Changes
使用应用程序类 - Activity restart on rotation Android
【讨论】:
在你的 AndroidManifest.xml 中声明这个
<activity android:name=".complex_examples.VideoPlayerActivity"
android:configChanges="keyboard|keyboardHidden|orientation
|screenSize|screenLayout|smallestScreenSize|uiMode"
android:launchMode="singleTop"/>
但要小心,Android Developers Documentation 说只有在没有更好的选择时才应该这样做。
注意:应避免使用此属性,仅用作最后 采取。请阅读处理运行时更改以获取更多信息 关于如何正确处理由于配置更改而导致的重启。
如果您确定要这样做,您可以在onConfigurationChanged()方法中自行处理配置更改。
【讨论】:
停止破坏旋转中的活动
`android:configChanges="keyboardHidden|orientation|screenSize"`
【讨论】:
只需为清单文件中的所有应用活动添加 android:configChanges="keyboardHidden|orientation|screenSize"
【讨论】:
对我来说,当改变夜间模式时,只在清单中写下这个:
android:configChanges="uiMode"
【讨论】:
把这个放在AndroidManifest.xml下
<activity android:name=".MainActivity"android:configChanges="orientation|screenSize">
请让我知道它是否有效(它对我有用,我是 Android 工作室的新手) 我在网上看到了这段代码。
【讨论】: