方向更改时不要重新加载应用程序
旋转屏幕时,我无需任何更改。 我的应用程序在第一次加载时显示一个随机图像,旋转设备不应该select另一个随机图像。 我怎么能(简单地)使这种行为停止?
通常有三种方法可以做到这一点:
-
正如其中一些答案所build议的,您可以区分第一次创build的活动和从
savedInstanceState
恢复的savedInstanceState
。 这是通过覆盖onSaveInstanceState
并检查onCreate
的参数来完成的。 -
您可以通过在清单中的
<activity>
中添加android:screenOrientation="portrait"
(或"landscape"
)来将活动locking在一个方向上。 -
你可以通过在
<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); }