1

У меня есть приложение для просмотра изображений, которое обрабатывает очень большие изображения со значительным кэшированием. Когда пользователь поворачивает устройство, это вызовет икоту, если приложение полностью перезапустится.onConfigurationChanged Реорганизованный макет для ориентации

Если я отключу изменения ориентации, то повороты устройства будут бесшовными, но у меня есть боковая панель, которая по-разному ориентирована на пейзаж и портрет. Когда изменения ориентации отключены, боковая панель останется в прежнем состоянии, съедая огромные куски недвижимости.

Есть ли способ, который я мог бы позволить аспектам макета обновлять при вращении без полного перезапуска активности?


РЕД (Подробнее)


я добавляю больше информации, чтобы сделать мой первоначальный вопрос более ясно, так что я могу ответить на него. Макет как таковой:

___ _ 
| | | 
| V |S| Landscape 
|___|_| 

___ 
| | 
| V | 
|___| Portrait 
|_S_| 

V = Телезритель S = Боковая панель

боковой панели тот же фрагмент, однако он использует другую схему, основанную на ориентации. Моя первоначальная попытка была сложной настройкой нескольких макетов. Это работало нормально, когда я разрешил активности перезапускать изменения ориентации. Однако, поскольку я не хочу переиздавать весь тяжелый подъем (или добавить лишние накладные расходы), мне нужно было найти способ настроить макет на изменения ориентации без полного перезапуска.

+0

управлять этими вещами в onpause() и методах resume() – Metalhead1247

ответ

1

То, что я в конечном итоге делает регулировал раскладку обрабатывать как пейзаж и портрет с пустыми контейнерами, которые позднее будут заполнены с соответствующим фрагментом:

<RelativeLayout> 
    ... 
    <FrameLayout 
     android:id="@+id/xmpRightContainer" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" > 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/xmpBottomContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" > 
    </FrameLayout> 
</RelativeLayout> 

В onConfigurationChanged:

if (xmpFrag != null) 
    { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.remove(getSupportFragmentManager().findFragmentByTag(XmpFragment.FRAGMENT_TAG)); 
     ft.commit(); 
     fm.executePendingTransactions(); 
    } 

    xmpFrag = new XmpFragment(); 
    int container; 
    boolean isPortrait = getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; 
    if (isPortrait) 
    { 
     container = R.id.xmpBottomContainer; 
    } 
    else 
    { 
     container = R.id.xmpRightContainer; 
    } 

    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(container, xmpFrag, XmpFragment.FRAGMENT_TAG);  
    ft.commit(); 
    fm.executePendingTransactions(); 

Это отлично работает и вращающееся устройство теперь доступно пользователю.

1

положить эту строку в тег активности вашего манифеста,

android:configChanges="orientation" 
+0

Вопрос был на самом деле намного сложнее, чем просто. Я уточнил вопрос и добавил решение, в котором я закончил. – Anthony

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

  • Нет связанных вопросов^_^