旋转屏幕时,我根本不需要改变任何东西。 我的应用在首次加载时显示随机图像,旋转设备时不应选择其他随机图像。
我怎样(简单地)让这种行为停止?
-
也可以从代码中锁定(并可能解锁)屏幕方向。 只需从github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/&hellip中调用Screen.lockOrientation(this); 为了这。 它允许解锁清单没有。
-
@Escobar Ceaser这个问题的正确解决方案是什么。即使我有同样的要求。
-
我想在代码中以编程方式执行此操作。
通常有三种方法可以做到这一点:
正如一些建议的答案,您可以区分第一次创建活动和从savedInstanceState恢复的活动的情况。这是通过覆盖onSaveInstanceState并检查onCreate的参数来完成的。
您可以通过在清单中将android:screenOrientation="portrait"(或"landscape")添加到来将活动锁定在一个方向上。
您可以通过在标记中指定android:configChanges="orientation|screenSize"来告诉系统您打算自己处理屏幕更改。这样就不会重新创建活动,而是会收到一个回调(你可以忽略它,因为它对你没用)。
就我个人而言(3)。当然,如果将应用程序锁定到其中一个方向对您来说没问题,您也可以使用(2)。
-
所以对于#3你说我要做的就是在我的清单上加上那行?因为它不起作用。
-
是的,#3对我来说也没有用过。
-
ps ...#2也不起作用。它只是强制应用程序以特定方向显示。旋转屏幕仍然重新加载活动。
-
#3请查看stackoverflow.com/questions/456211/…
-
#3为我工作。
-
#3不适合我,我添加了这个:android:configChanges="orientation|keyboardHidden"
-
@EscobarCeaser,对于Android 3.2及更高版本,您需要android:configChanges="orientation|screenSize"
-
对我来说,解决方案#3运作得很好。设备轮换后不会重新创建活动。谢谢!
-
android:configChanges="orientation|screenSize"适合我。谢谢@Pacerier
-
请更新您的答案#3,其中android:configChanges="orientation|screenSize"值为API> = 13,因为很多人将您的答案视为主要答案!
-
android:configChanges ="orientation | screenSize"适合我
-
案例#3对我有用,但是当我从纵向切换到横向然后屏幕不适合设备宽度时,它有问题。它是根据肖像的宽度设置宽度尺寸。
-
#3工作,没有测试没有setRetainInstance(true);
-
有关更多信息android:configChanges:developer.android.com/guide/topics/manifest/…
-
#3和android一起工作:screenOrientation ="nosensor"
-
smallestScreenSize怎么样?
-
对我来说选项#3是完美的!
-
它工作正常,但是,谷歌不推荐这种方法中的大多数应用程序。请让我知道实现的最佳方法???
-
谢谢,它为我工作。
-
有用。我把它添加到mainactivity中
Xion的答案很接近,但除非应用程序的API级别为12或更低,否则#3(android:configChanes="orientation")将无效。
在API级别13或更高级别,当方向更改时,屏幕大小会更改,因此这仍会导致活动在方向更改时被销毁并启动。
只需添加"screenSize"属性,就像我在下面所做的那样:
1 2 3 4
| <activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity> |
现在,当您更改方向(和屏幕大小更改)时,活动将保持其状态并调用onConfigurationChanged()。当方向改变时,这将保留屏幕上的任何内容(即:Webview中的网页)。
从这个网站了解到:
http://developer.android.com/guide/topics/manifest/activity-element.html
此外,这显然是一个不好的做法,请阅读以下有关处理运行时更改的链接:
http://developer.android.com/guide/topics/resources/runtime-changes.html
-
谢谢......将"screenSize"添加到"orientation"之后的工作
-
适用于三星Galaxy Nexus android 4.2.1! android:configChanges="orientation|screenSize"
-
惊人。一直在通过代码工作这么多个小时来解决我从活动重新加载的问题和从头开始的视频。这是解决方案! ++++ 1
-
不好的做法? Pfft,现实生活中的人有截止日期,如果有效,它有效;)
-
如果这是一个不好的做法那么为什么它得到这么多的赞成?
-
@SharpEdge因为人们很懒。
-
@Kernald,我的评论很老,在处理片段之后,现在我可以确认这确实是不好的做法!
-
@SharpEdge这个解释对其他人来说仍然有用。
-
是的,最后提到它的一个不好的做法为它增添了一些道理......
-
smallestScreenSize怎么样?
-
@corbin:谷歌不推荐这种方法中的大多数应用程序。请让我知道实现的最佳方法???
-
@ManikandanK根据我的回答Android建议将生命周期方法作为最佳实践。希望上面的链接可以帮助你。祝好运!
你只需要去AndroidManifest.xml和里面或你的活动标签,你必须输入这行代码作为那里的人说:
1
| android:configChanges="orientation|screenSize" |
所以,你会有这样的事情:
1 2 3
| <activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity> |
希望它有效!
-
它没有加载我的布局 - 土地布局。 :(没有为我工作
1 2
| <activity android:name="com.example.abc"
android:configChanges="orientation|screenSize"></activity> |
只需在清单文件的活动选项卡中添加android:configChanges="orientation|screenSize"即可。
因此,方向更改时,Activity不会重新启动。
-
它的工作。但是当我为每个方向layout.xml和layout-land.xml使用单独的布局时。它适用于两种方向的景观布局。如果我只使用"方向",它给出我期望但重新加载。你可以帮忙吗?
-
@KarthikeyanVe当你想作弊时,这就是问题所在。您必须重新启动活动才能更改布局。继续使用真正的解决方案,即使用onSaveInstanceState()和onCreate()。
-
@ MarcPlano-Lesay我怎么想这样做?
-
@Weaboo实际解决方案链接在问题中:developer.android.com/guide/topics/resources/…
-
@ MarcPlano-Lesay我为纵向和横向模式分别布局,如果我在横向或纵向模式下打开我的应用程序它工作正常但每当我尝试在运行时更改方向时它会关闭我的应用程序,但是当我登录到我的应用程序时然后导航到MainActivity并尝试更改方向,重新加载该活动并正常工作。现在的问题是为什么?我的代码中是否存在逻辑错误? Idk,但我已经尝试了几次调试应用程序,我找不到任何东西。此外,我不想重新启动我的活动,为什么我们不能只在配置发生变化时调整各自的布局?
根据我的经验,实际上更好地处理方向更改而不是试图窃取非默认行为。
您应该保存当前正在onSaveInstanceState()中显示的图像,并在应用程序再次运行onCreate()时正确还原。
-
#3是一个完全有效的解决方案。这是解决这个问题的确切工具。为什么你说这是鞋子呢?
-
@Pacerier只是阅读文档。"注意:应该避免使用android:configChanges并且仅作为最后手段使用。请阅读处理运行时更改以获取有关如何正确处理因配置更改而导致重新启动的信息。"
-
你能发布一个保存和恢复的例子吗?
这个解决方案是迄今为止最好的解决方案。在您的清单文件中添加
1 2 3 4 5 6
| <activity
android:configChanges="keyboardHidden|orientation|screenSize"
android:name="your activity name"
android:label="@string/app_name"
android:screenOrientation="landscape">
</activity |
在您的活动类中添加以下代码
1 2 3 4 5 6 7 8 9 10 11
| @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
}
} |
在最明显的文件中添加每个活动。这会有所帮助
1
| android:configChanges ="orientation|keyboard|keyboardHidden|screenLayout|screenSize" |
-
没有screenLayout的工作
-
screenLayout对我有用,在为android上的splitscreen调整应用程序时无法刷新
为清单中的所有应用活动标记添加android:configChanges="keyboardHidden|orientation|screenSize"。
以上所有答案都不适合我。所以,我已经通过提及label与screenOrientation修复如下。现在一切都很好
1 2 3
| <activity android:name=".activity.VideoWebViewActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"/> |
只需将其添加到AndroidManifest.xml即可
我的意思是,有一个活动标签,将其添加为另一个参数。如果您需要纵向方向,请将横向更改为纵向。希望这可以帮助。
-
我不想拿走旋转屏幕的能力。我只是不希望我的应用程序重新加载...正如我提到的那样。
-
ps ...无论如何这都不起作用。它只是强制应用程序以特定方向显示。旋转屏幕仍然重新加载活动
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
1 2 3 4 5 6 7 8 9
| @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;
} |
正如Pacerier所说,
android:configChanges="orientation|screenSize"
只需使用:android:configChanges="keyboardHidden|orientation"
将图像详细信息保存在onPause()或onStop()中,并在onCreate(Bundle savedInstanceState)中使用它来恢复图像。
编辑:
有关实际过程的更多信息,请参阅http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle,因为它在Honeycomb中与以前的Android版本不同。
-
实际上你应该在onSaveInstanceState()方法中做到这一点
在包含WebView的活动中的onCreate方法之后添加此代码
1 2 3 4 5 6 7 8 9
| @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
} |
-
这怎么样?你是不是只是明确地向运行时说了些什么,否则默认会做什么?