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

Jim*_*y D 152 android

旋转屏幕时,我根本不需要改变任何东西.我的应用程序显示时,第一次加载和旋转设备应随机图像选择另一随机图像.我怎样(简单地)让这种行为停止?

Xio*_*ion 243

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

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

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

  3. 您可以通过android:configChanges="orientation|screenSize"<activity>标记中指定来告诉系统您打算自己处理屏幕更改.这样就不会重新创建活动,而是会收到一个回调(你可以忽略它,因为它对你没用).

就我个人而言(3).当然,如果将应用程序锁定到其中一个方向对您来说没问题,您也可以使用(2).

  • @EscobarCeaser,对于Android 3.2及以上版本,你需要`android:configChanges ="orientation | screenSize"` (16认同)
  • 所以对于#3你说我要做的就是在我的清单上加上那行?因为它不起作用. (13认同)
  • `android:configChanges ="orientation | screenSize"`适合我.谢谢@Pacerier (8认同)
  • #3请查看http://stackoverflow.com/questions/456211/activity-restart-on-rotation-android (2认同)

cor*_*bin 212

Xion的答案很接近,但android:configChanes="orientation"除非应用程序的API级别为12或更低,否则#3()将无效.

在API级别13或更高级别,当方向更改时,屏幕大小会更改,因此这仍会导致活动在方向更改时被销毁并启动.

只需添加"screenSize"属性,就像我在下面所做的那样:

<activity
    android:name=".YourActivityName"
    android:configChanges="orientation|screenSize">
</activity>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 不好的做法?Pfft,现实生活中的人有截止日期,如果有效,它有效;) (6认同)
  • 谢谢...添加“ screenSize”和“ orientation”后的工作 (2认同)

Jos*_*cha 26

你只需要去AndroidManifest.xml内部或你的活动标签,你必须输入这行代码作为那里的人说:

android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)

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

<activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity>
Run Code Online (Sandbox Code Playgroud)

希望它有效!


Aiy*_*mar 16

<activity android:name="com.example.abc" 
 android:configChanges="orientation|screenSize"></activity>
Run Code Online (Sandbox Code Playgroud)

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

因此,方向更改时,Activity不会重新启动.


dmo*_*mon 9

根据我的经验,实际上更好地处理方向更改而不是试图窃取非默认行为.

您应该保存当前正在显示的图像,onSaveInstanceState()并在应用程序onCreate()再次运行时正确还原.


小智 6

这个解决方案是迄今为止最好的解决方案.在您的清单文件中添加

<activity
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:name="your activity name"
    android:label="@string/app_name" 
    android:screenOrientation="landscape">
  </activity
Run Code Online (Sandbox Code Playgroud)

在您的活动类中添加以下代码

@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

    }
}
Run Code Online (Sandbox Code Playgroud)


Jev*_*nov 6

在清单文件中将其添加到每个活动中。这会有所帮助

android:configChanges = "orientation|keyboard|keyboardHidden|screenLayout|screenSize"
Run Code Online (Sandbox Code Playgroud)