Фрагментный дизайн :Адаптация к нескольким макетам экрана путем отображения/скрытия фрагментов в одном действии?

Я пытаюсь понять, как использовать фрагменты для создания приложений, которые хорошо адаптируются к нескольким экранам и макетам. Я изучил несколько примеров:

  1. Документ Фрагменты в руководстве для разработчиков Android.
  2. Приложение Google IO
  3. Пример фрагментов из ActionBar Sherlock .

Все они поддерживают множественный Activityподход:

  • На большом экране отобразите один Activityс несколькими Fragments
  • На меньшем экране разделите Fragments среди нескольких Activityс.

Я подумал о другом подходе -одиночный Activityодин:

  • Есть одиночный Activityсо всеми Fragments в нем.
  • В зависимости от размера и ориентации экрана отобразите/скройте соответствующиеFragment(s)(с помощью FragmentTransaction.show()/FragmentTransaction.hide()).

Чтобы проиллюстрировать тот же пример «Список новостных статей/содержимое статьи», который используется в руководстве для разработчиков Android,:

  • Имейте действие News, содержащее как ArticleListFragment, так и ArticleReaderFragment.
  • На вкладке всегда отображаются оба фрагмента.
  • На телефоне ArticleReaderFragmentизначально скрыт. Когда статья выбрана из списка, ArticleListFragmentскрывается, а отображается ArticleReaderFragment.

Кто-нибудь использовал подобный подход? Есть ли какие-либо практические недостатки этого метода? Кажется ли это лучше/хуже по сравнению с методом множественной активности -? Например, в XML нельзя показывать/скрывать фрагменты -, для этого нужно использовать FragmentTransaction.


РЕДАКТИРОВАТЬ 1 :Описание гипотетического сценария

Представьте себе приложение, которое может одновременно отображать на экране до трех «панелей». Дальше,это факторы, которые следует учитывать:

  • Телефон может одновременно отображать только одну панель (независимо от портретной/альбомной ориентации)
  • Планшет с диагональю 7 -дюймов может отображать 2 панели, разделенные по вертикали в книжной ориентации и разделенные горизонтально в ландшафтном режиме.
  • На планшете с диагональю экрана более 10 дюймов можно отображать 2 панели, разделенные по вертикали в портретной ориентации; 3 панели разделены по горизонтали в альбомной ориентации.

Для простоты давайте не будем обсуждать экраны телевизоров.

Теперь перейдем к дизайну:

  • У нас есть три фрагмента :Frag1, Frag2 и Frag3.
  • В простейшем случае, все три фрагмента находятся в одном Activity (, назовем его ActivityA ). Это 10 -дюймовый корпус горизонтальной ориентации.
  • Другой "простой" случай, когда каждый фрагмент находится в своей собственной деятельности -ActivityA содержит Frag1; ActivityB содержит Frag2, а ActivityC содержит Frag3.

До сих пор мы не рассматривали ничего существенно отличающегося от примера News Reader, представленного в руководстве для разработчиков Android. Единственным существенным отличием является наличие трех фрагментов вместо двух.

Теперь дело за 7 -дюймовыми выступами, которые могут вместить только 2 фрагмента. Как это будет работать? Обратите внимание, что здесь возможны две комбинации:

  1. Frag1 и Frag2 отображаются.
  2. Отображаются Frag2 и Frag3.

Я просто не могу уложить это в голове. Делаю ли я все это в ActivityA? Мне просто создать совершенно новый ActivityD? Сколько макетов мне нужно создать (Я насчитал около 8 )? Не слишком ли много перестановок?

Я понимаю, что подход с одной -активностью, который я предложил выше, также может не подходить для этого сценария -, поскольку отображение/скрытие фрагментов само по себе -нетривиально.

Есть предложения, как справиться с этим, не перегружаясь макетами и комбинациями?

38
задан curioustechizen 12 April 2012 в 03:53
поделиться