Я хотел бы, чтобы мой макет VIEW был скорректирован при изменении ориентации.
Мой манифест настроен с помощью: android:configChanges="keyboardHidden|orientation"
в действии.
У меня res/layout-land
, res/layout-port
.
У меня есть onConfigurationChanged
в моем Activity
(он вызывается при ротации).
В моем Activity
есть ViewFlipper
, а внутри него LinearLayouts
.
Когда я ЗАПУСКАЮ Activity
в портовом или наземном режиме, макет View правильный (согласно моим res/layout-????
файлам).
Но когда я уже в Activity
и поворачиваю телефон, то у меня раскладка View не меняется. Экран повернут, и onCreate
активности не вызывается, как положено, onConfigurationChanged
вызывается в Activity
, но экран всегда перерисовывается с LinearLayout
, который был загружен при запуске Activity
.
У меня ощущение, что я что-то упускаю в onConfigurationChanged
, но не знаю что. Думаю, мне нужно вызвать какую-то функцию для ViewFlipper
или LinearLayout
внутри. Какие функции я должен вызывать?
ViewFlipper flipper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
flipper = new ViewFlipper(getApplicationContext());
setContentView(flipper);
initLayout();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(flipper);
}
void initLayout() {
MyView myview = createMyView(0);
flipper.addView(myview, 0);
myview = createMyView(1);
flipper.addView(myview, 1);
myview = createMyView(1);
flipper.addView(myview, 1);
}
Я пытался добавить flipper = new ViewFlipper(getApplicationContext());
к onConfigurationChanged()
, но после поворота все стало черным. Я думаю, мне придется вызвать initLayout, но это будет пересчитывать все (и это именно то, чего я не хочу делать, и поэтому я пытаюсь сделать это с помощью onConfigurationChanged
, в отличие от Android по умолчанию "dropMyActivity & создать новую активность"
РЕШЕНИЕ. Раньше я думал, что могу активировать обновление макета при повороте, но, похоже, мне нужно заново создать макет с текущим контекстом (после изменения ориентации)
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.category_flipper);
ViewFlipper oldFlipper = viewFlipper;
viewFlipper = (ViewFlipper)findViewById(R.id.categoryFlipper);
for (int i = 0; i < 3; i++) {
final CardLayout cl = new CardLayout(this, cardData[i]);
viewFlipper.addView(cl);
}
cardData[viewIndex].restorePlayer();
viewFlipper.setDisplayedChild(viewIndex);
oldFlipper.removeAllViews();
}