Мне просто не нужно ничего менять, когда экран вращается. Мое приложение отображает случайное изображение, когда оно сначала загружается, и вращение устройства не должно выбирать другое случайное изображение. Как я могу (просто) остановить это поведение?
Не перезагружать приложение при изменении ориентации
Ответ 1
Обычно существует три способа сделать это:
-
Как и некоторые из предложенных ответов, вы можете отличить случаи своей деятельности, создаваемой в первый раз, и быть восстановленными с
savedInstanceState
. Это делается путем переопределенияonSaveInstanceState
и проверки параметраonCreate
. -
Вы можете заблокировать активность в одной ориентации, добавив
android:screenOrientation="portrait"
(или"landscape"
) к<activity>
в ваш манифест. -
Вы могли бы сообщить системе, что вы собираетесь обрабатывать изменения экрана для себя, указав
android:configChanges="orientation|screenSize"
в теге<activity>
. Таким образом, активность не будет воссоздана, но вместо этого получит обратный вызов (который вы можете игнорировать, поскольку он вам не подходит).
Лично я бы пошел с (3). Конечно, если вы закрываете приложение одной из ориентаций, вы также можете пойти с (2).
Ответ 2
Ответ Xion был близок, но # 3 (android:configChanes="orientation"
) не будет работать, если приложение не имеет уровня API 12 или ниже.
В уровне API 13 или выше размер экрана изменяется при изменении ориентации, поэтому это все еще приводит к уничтожению активности и ее началу при изменении ориентации.
Просто добавьте атрибут screenSize, как показано ниже:
<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity>
Теперь, когда вы меняете ориентацию (и изменения размера экрана), активность сохраняет свое состояние и вызывается onConfigurationChanged()
. При изменении ориентации будет сохраняться все, что находится на экране (т.е. Веб-страница в веб-просмотре).
Узнал об этом с этого сайта: http://developer.android.com/guide/topics/manifest/activity-element.html
Кроме того, это, по-видимому, плохая практика, поэтому прочитайте ссылку ниже о том, как обрабатывать изменения времени выполнения:
http://developer.android.com/guide/topics/resources/runtime-changes.html
Ответ 3
Вам просто нужно пойти в AndroidManifest.xml
и внутри или в ваших ярлыках действий, вы должны набрать эту строку кода, как сказал кто-то там:
android:configChanges="orientation|screenSize"
Итак, у вас будет что-то вроде этого:
<activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity>
Надеюсь, что это сработает!
Ответ 4
<activity android:name="com.example.abc"
android:configChanges="orientation|screenSize"></activity>
Просто добавьте android:configChanges="orientation|screenSize"
на вкладку активности файла манифеста.
Таким образом, активность не будет перезагружаться при изменении ориентации.
Ответ 5
По моему опыту, на самом деле лучше просто справляться с ориентацией, а не пытаться обучать поведению, отличному по умолчанию.
Вы должны сохранить изображение, которое в настоящее время отображается в onSaveInstanceState()
, и восстановить его правильно, когда ваше приложение снова пробегает onCreate()
.
Ответ 6
Это решение, безусловно, является лучшим рабочим. В файле манифеста добавьте
<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
}
}
Ответ 7
Просто добавьте это в свой AndroidManifest.xml
<activity android:screenOrientation="landscape">
Я имею в виду, что есть тег активности, добавьте это как еще один параметр. Если вам нужна портретная ориентация, измените пейзаж на портрет. Надеюсь, это поможет.
Ответ 8
добавить android:configChanges="keyboardHidden|orientation|screenSize"
для всех тегов действий приложения в манифесте.
Ответ 9
Сохраните детали изображения в onPause()
или onStop()
и используйте его в onCreate(Bundle savedInstanceState)
для восстановления изображения.
EDIT:
Подробнее о реальном процессе подробно описано здесь http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle, поскольку он отличается от сотовых, чем предыдущие версии Android.
Ответ 10
просто используйте: android:configChanges="keyboardHidden|orientation"
Ответ 11
Как отметил Пасерьер,
android:configChanges="orientation|screenSize"
Ответ 12
В явном файле добавьте к каждой активности это. Это поможет android: configChanges = "ориентация | клавиатура | клавиатураHidden | screenLayout | screenSize"
Ответ 13
Все вышеперечисленные ответы не работают для меня. Итак, я исправил упоминание label
с screenOrientation
, как показано ниже. Теперь все прекрасно
<activity android:name=".activity.VideoWebViewActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"/>
Ответ 14
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;
}
Ответ 15
Добавьте этот код после метода onCreate
, который содержит WebView
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
}