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