Фрагменты. Как составить окончательный макет приложения в зависимости от размера экрана? - PullRequest
0 голосов
/ 17 декабря 2011

Редактировать:

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


Происхождение:

Недавно я начал более внимательно смотреть на концепцию Fragments в Android .Я действительно получаю представление об этом (или, по крайней мере, я так думаю), и я также вижу необходимость в этом.У меня нет проблем с пониманием технических деталей, лежащих в основе реализации моих фрагментов.Однако мне кажется, что мне трудно понять, как составить окончательный макет моего приложения, чтобы оно автоматически работало как на большом планшете, так и на небольшом смартфоне?

У меня есть фрагмент списка (например,MS Outlook-inbox-list) и у меня есть фрагмент подробного просмотра (например, MS Outlook-email-preview). На планшете я, естественно, хотел бы показать эти два фрагмента в одном упражнении, но на смартфоне я хотел бы показать их в двух разных действиях, хотя для них обоих не обязательно есть место наодно действие.

Как мне решить эту проблему?

Нужно ли выполнять три действияв моем приложении (действие «все в одном» для планшета и два отдельных действия для смартфона)?Но как тогда приложение может решить, какую реализацию использовать (1 или 1 + 1)?

Обычно мои действия играют роль «контроллера» (согласно парадигме MVC), но, как указано выше,Вопрос, у меня было бы три контроллера. Какая конструкция будет играть роль корневого контроллера? Должен ли я написать «основное действие» (без пользовательского интерфейса), которое программно пытается решить, на каком устройстве оно живет, а затем вызвать подходящеефрагменты активности соответственно? Но тогда;как я могу - четко определенным образом - узнать, на каком типе устройства (планшета / трубки) работает мое приложение?

Я полагаю, что мог бы опубликовать часть своего кода, но яне думаю, что это прояснит мою проблему дальше, так как это больше вопрос выбора архитектуры, чем конкретной реализации. Ура,дБмВт

1 Ответ

0 голосов
/ 17 декабря 2011

Должен ли я выполнять три действия в своем приложении (действие «все в одном» для планшета и два отдельных действия для смартфона)?

Нет, наверное, только два. Один отвечает за загрузку ListFragment и, если есть место, фрагмент детали. Другой загружает только фрагмент детализации - эта операция будет запущена первой, если пользователь нажмет на запись списка, а фрагмент детали не отобразится при первой операции.

Обычно мои действия играют роль «контролера» (согласно парадигме MVC), но, как указано выше, у меня было бы три контроллера.

ИМХО, с фрагментами, фрагмент является вашим контроллером. Действия - это уровень оркестровки, определяющий, какие фрагменты видимы, и обрабатывающий межфрагментные события.

Но тогда; как я могу - четко определенным образом - узнать, на каком типе устройства (планшета / трубки) работает мое приложение?

Самым простым решением во многих случаях является использование ресурсов XML.

Например, в моей вышеупомянутой рекомендации первое действие может иметь две разные версии, скажем, main.xml. Один (res/layout/main.xml) загружает только ListFragment. Другой (скажем, res/layout-large-land/main.xml) загружает ListFragment и фрагмент детали или загружает контейнеры ListFragment и FrameLayout для динамического фрагмента детали (тот, который вы определите через FragmentTransaction). Само действие определяет, управляет ли оно двумя фрагментами или одним, определяя, существует ли второй фрагмент (или его FrameLayout "слот") в надутом main.xml. Таким образом, если в будущем вы измените правила компоновки (например, res/layout-sw600dp-land/main.xml), ваш код Java менять не нужно.

Ничто не мешает вам использовать Configuration и DisplayMetrics, чтобы попытаться принимать решения и в коде Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...