12

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

Я попытался

[активность (Ярлык = "MyActivity", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation)]

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

ответ

40

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

@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" 

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

+0

11-07 13: 44: 47.143: E/AndroidRuntime (2586): Caused by: java .lang.IllegalStateException: вам разрешено иметь только один MapView в MapActivity Показывает эту ошибку, когда я включаю это –

+0

Где добавить этот код в mainActivity ИЛИ каждый фрагмент в действии и R.layout.landscapeView и R.layout .portraitView - это два разных макета – Kailas

+0

wow! Все, что я хотел! :) –

5

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

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 
    } 
} 
+1

Метод OnCreate() вызывается для изменения ориентации. – sujay

+0

@surjay Вам нужно добавить 'android: configChanges =" keyboardHidden | orientation | screenSize' в свой <тег активности в файле манифеста. – CopsOnRoad

Смежные вопросы