方向更改时不要重新加载应用程序

旋转屏幕时,我无需任何更改。 我的应用程序在第一次加载时显示一个随机图像,旋转设备不应该select另一个随机图像。 我怎么能(简单地)使这种行为停止?

通常有三种方法可以做到这一点:

  1. 正如其中一些答案所build议的,您可以区分第一次创build的活动和从savedInstanceState恢复的savedInstanceState 。 这是通过覆盖onSaveInstanceState并检查onCreate的参数来完成的。

  2. 您可以通过在清单中的<activity>中添加android:screenOrientation="portrait" (或"landscape" )来将活动locking在一个方向上。

  3. 你可以通过在<activity>标签中指定android:configChanges="orientation|screenSize"来告诉系统你想要为自己处理屏幕变化。 这样的活动将不会被重新创build,但会收到一个callback(而您可以忽略,因为它对你没有用处)。

我个人会和(3)一起去的。 当然,如果将应用程序locking到其中一个方向,那么也可以使用(2)。

Xion的答案很接近,但#3( android:configChanes="orientation" )将不起作用,除非应用程序的API级别为12或更低。

在API级别13或更高版本中,屏幕大小在方向改变时会改变,所以这仍然会导致活动在方向更改时被破坏和启动。

只需像下面这样添加“screenSize”属性:

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

现在,当您更改方向(和屏幕大小更改)时,活动保持其状态,并onConfigurationChanged() 。 当方向改变时,这将保持屏幕上的任何内容(即:Web视图中的网页)。

从这个网站了解到这一点: http : //developer.android.com/guide/topics/manifest/activity-element.html

此外,这显然是一个不好的做法,所以请阅读下面的链接处理运行时更改:

http://developer.android.com/guide/topics/resources/runtime-changes.html

你只需要去AndroidManifest.xml里面或在你的活动标签中,你必须input这行代码,就像上面有人说的那样:

 android:configChanges="orientation|screenSize" 

所以,你会有这样的事情:

 <activity android:name="ActivityMenu" android:configChanges="orientation|screenSize"> </activity> 

希望它的作品!

 <activity android:name="com.example.abc" android:configChanges="orientation|screenSize"></activity> 

只需在清单文件的活动选项卡中添加android:configChanges="orientation|screenSize"

所以,当方向改变时,Activity不会重新启动。

根据我的经验,恰当地处理方位变化,而不是试图强化非默认行为,是更好的select。

您应该将当前显示的图像保存在onSaveInstanceState()并在应用程序再次通过onCreate()运行时正确恢复。

这个解决scheme是迄今为止最好的解决scheme。 在你的清单文件中添加

 <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="your activity name" android:label="@string/app_name" android:screenOrientation="landscape"> </activity 

并在您的活动课添加下面的代码

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { //your code } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { //your code } } 

只需将其添加到您的AndroidManifest.xml

 <activity android:screenOrientation="landscape"> 

我的意思是,有一个活动标签,添加这个作为另一个参数。 如果您需要纵向定位,请将横向改为纵向。 希望这可以帮助。

为清单中的所有应用活动标记添加android:configChanges="keyboardHidden|orientation|screenSize"

将图像细节保存在onPause()onStop() ,并在onCreate(Bundle savedInstanceState)使用它来恢复图像。

编辑:

有关实际过程的更多信息,请参阅http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle,因为它与以前的Android版本不同。;

只需使用: android:configChanges="keyboardHidden|orientation"

正如Pacerier所说,

android:configChanges="orientation|screenSize"

在最鲜明的文件中join这个活动。 这将帮助android:configChanges =“orientation | keyboard | keyboardHidden | screenLayout | screenSize”

以上所有答案都不适合我。 所以,我已经通过提到像下面的screenOrientation label 。 现在一切都很好

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

http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html

 @Override protected void onSaveInstanceState(Bundle b) { super.onSaveInstanceState(b); String str="Screen Change="+String.valueOf(screenChange)+"...."; Toast.makeText(ctx,str+"You are changing orientation...",Toast.LENGTH_SHORT).show(); screenChange=true; } 

在包含WebView活动中的onCreate方法之后添加此代码

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); }