Я бы хотел, чтобы мой макет VIEW изменялся при изменении ориентации.
Мой манифест настроен с помощью: android: configChanges = "keyboardHidden | Ориентация"
для действия.
У меня есть res / layout-land
, res / layout-port
.
У меня есть onConfigurationChanged
в моем Activity
( он вызывается при вращении).
В моем Activity
у меня есть ViewFlipper
, а внутри него LinearLayouts
.
Когда я запускаю Действие
в режиме порта или суши, расположение обзора правильное (согласно
в мои res / layout - ????
файлы).
Но когда я уже нахожусь в Activity
и поворачиваю телефон, мой макет просмотра не изменяется . Экран вращается, и 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 & createANewActivity"
РЕШЕНИЕ: Раньше я думал, что могу активировать обновление макета при повороте, но мне кажется, что мне нужно заново создать макет с текущим контекстом (после изменения ориентации)
@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();
}