不要在方向更改时重新加载应用程序
通常有三种方法可以做到这一点:
由于一些答案的建议,你可以区分你的活动是第一次创建,并从
savedInstanceState
正在恢复的情况。这是通过覆盖onSaveInstanceState
并检查onCreate
的参数来完成的。您可以通过在清单中将
android:screenOrientation="portrait"
(或"landscape"
)添加到<activity>
来锁定某个方向的活动。通过在
<activity>
标记中指定android:configChanges="orientation|screenSize"
,您可以告诉系统您意图处理自己的屏幕更改。这样,活动将不会被重新创建,但会收到一个回调(您可以忽略,因为它对您没有用处)。
就我个人而言,我会选择(3)。当然,如果将应用程序锁定到其中一个方向对您来说没有问题,那么也可以使用(2)。
因此对于#3你是否说我所要做的就是将该行添加到我的清单中?因为它不起作用。 – 2011-05-06 15:23:36
是的,#3从来没有为我工作过。 – dmon 2011-05-06 15:29:55
大声笑,那么为什么人们不要先测试它,而是继续发布它? – 2011-05-06 15:32:51
只需添加到您的AndroidManifest.xml
<activity android:screenOrientation="landscape">
我的意思是,有一个活动标签,将其添加为另一个参数。如果您需要纵向定位,请将横向改为纵向。希望这可以帮助。
即时通讯不想带走旋转屏幕的能力。我只是不希望我的应用程序重新加载...正如我所提到的。 – 2011-05-06 15:11:32
ps ...这不管用。它只是迫使应用程序以一定的方向显示。旋转屏幕仍然会重新加载活动 – 2011-05-06 15:41:52
将图像详细信息保存在您的onPause()
或onStop()
中,并在onCreate(Bundle savedInstanceState)
中使用它恢复图像。
编辑:在实际过程
更多信息在这里http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle详细,因为它是在蜂窝比以往的Android版本不同。
实际上,您应该在onSaveInstanceState()方法中执行 – 2016-09-27 09:57:48
这是我的经验,它实际上更好地处理适当的方向更改,而不是试图阻止非默认行为。
当您的应用程序再次通过onCreate()
运行时,您应该将当前显示的图像保存在onSaveInstanceState()
中并正确恢复。
Xion的答案很接近,但#3(android:configChanes="orientation"
)将不起作用,除非应用程序的API级别为12或更低。
在API级别13或更高版本中,屏幕大小在方向更改时发生更改,因此仍会导致活动在方向更改时被销毁和启动。
只需添加“屏幕尺寸”属性,像我一样如下:
<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity>
现在,当你改变方向(与屏幕尺寸的变化),活动保持其状态和被调用。当方向改变时,这将保持屏幕上的任何内容(即:Web视图中的网页)。
从该网站了解到这一点: http://developer.android.com/guide/topics/manifest/activity-element.html
此外,这显然是一个坏的做法,让阅读下面关于处理运行时更改链接:
http://developer.android.com/guide/topics/resources/runtime-changes.html
谢谢..其工作后添加“screenSize”与“方向” – 2013-05-31 07:56:35
作品在Samsung Galaxy Nexus android 4.2.1! 'android:configChanges =“orientation | screenSize”' – 2014-03-15 13:40:35
令人惊叹。已经花了很长时间来完成代码,以解决我从一开始就关注活动重新加载和视频的问题。这就是解决方案! ++++ 1 – 2014-05-03 17:28:38
只需使用:android:configChanges="keyboardHidden|orientation"
对代码做些什么会有所帮助。 – 2013-02-07 20:37:39
你只需要去AndroidManifest.xml
和里面或在你的活动标签,你必须输入这行代码为某人在那里说:
android:configChanges="orientation|screenSize"
所以,你有这样的事情:
<activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity>
希望工程!
经过一个小时的搜索后,这对我有用:D – yashhy 2014-04-09 14:33:42
它没有加载我的布局土地布局。 :(没有为我工作 – 2016-10-21 11:22:04
感谢,作品像一个魅力 – 2017-08-08 13:35:04
您的活动添加此代码后onCreate
,方法包含WebView
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
}
这将如何工作?你不只是说一些明确的运行时间,否则会默认做什么? – Danielson 2015-04-09 10:06:23
<activity android:name="com.example.abc"
android:configChanges="orientation|screenSize"></activity>
就在清单文件的活动选项卡中添加android:configChanges="orientation|screenSize"
。
因此,当方向更改时,活动不会重新启动。
它的工作。但是当我使用为每个方向布局layout.xml和layout-land.xml。它应用两种方向的横向布局。如果我只使用“orientation”,它给出我期望的但是重新加载。你能帮忙吗? – 2015-06-24 07:31:22
@KarthikeyanVe这就是当你试图作弊时,会出现问题,你将*重新开始你的活动来改变布局,继续使用真正的解决方案,它使用'onSaveInstanceState()'和'onCreate()'。 – 2015-08-07 12:38:45
@MarcPlano -Lesay,我想怎么做? – Weaboo 2018-01-14 12:20:08
正如Pacerier提到,
android:configChanges="orientation|screenSize"
该解决方案是目前最好的工作之一。在您的清单文件中添加
<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
}
}
在清单中添加android:configChanges="keyboardHidden|orientation|screenSize"
为所有的应用程序活动标签。
在鲜明的文件中添加到每个活动中。这将有助于
android:configChanges = "orientation|keyboard|keyboardHidden|screenLayout|screenSize"
以上所有答案都不适用于我。所以,我已经通过提及label
与screenOrientation
修复如下。现在一切都精细
<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;
}
它也可以锁定(也可能是解锁)从代码屏幕方向。只需从https://github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/delight/android/baselib/Screen.java调用'Screen.lockOrientation(this)'即可。它允许解锁清单所没有的。 – caw 2015-03-04 18:34:34
@Escobar Ceaser什么是这个问题的正确解决方案。即使我有同样的要求。 – Prabs 2015-08-03 10:30:14
我想在代码中以编程方式执行此操作。 – pollaris 2017-09-27 16:05:10