Подтвердить что ты не робот

Предотвращать перезапуск активности при изменении ориентации

Я новичок в разработке Android. У меня есть отдельные экраны для портретного и ландшафтного режима. Когда я меняю свою ориентацию, загружается соответствующий экран, а активность перезапускается. Теперь я не хочу, чтобы моя активность перезапускалась, когда я меняю ориентацию, но должен загрузить соответствующий экран (axml).

Я пробовал

[Activity (Label = "MyActivity", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation)]

приведенная выше строка перестает активироваться, но перезагружается, но загружает один и тот же экран (axml). Пожалуйста, предложите. спасибо

4b9b3361

Ответ 1

Напишите этот код в своей деятельности

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.landscapeView);

    } else {
        setContentView(R.layout.portraitView);
    }
}

А также добавьте эту строку в файл манифеста

android:configChanges="orientation|keyboardHidden|screenSize"

Таким образом, это будет обрабатывать обе вещи, оно не перезапустит вашу активность и не загрузит макет в соответствии с вашими изменениями ориентации.

Ответ 2

Так как вы указали ОС, что хотите сами изменить ориентацию, теперь вам придется обрабатывать любые изменения в макете самостоятельно, например:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig); 

    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        setContentView(R.layout.portrait);
        //do other initialization
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.landscape);
        //do other initialization
    }
}