Лучший способ повторного использования нижнего колонтитула в Android

Я пытаюсь реализовать меню в нижнем колонтитуле приложения, похожее на приложение Engadget. Насколько я понимаю, получение стандартного TabLayout для работы таким образом не является тривиальным (если вообще возможно?).

Поскольку я вижу довольно много приложений, использующих эту парадигму интерфейса, я бы предположил, что есть умный способ сделать это. В настоящее время я определяю макет, добавляя строку include в конце каждого макета. Это отлично работает в отношении рендеринга, но я должен добавить onClickListeners для каждого действия. Мы можем определить clickListener через XML?

Подводя итог моему вопросу: Каков наилучший способ реализации общей навигации нижнего колонтитула по нескольким видам деятельности?

Вы можете сделать все свои действия из общего базового класса, который расширяет Activity и помещает туда метод для построения меню. Используйте RelativeLayout в качестве основного контейнера, придерживайтесь горизонтального LinearLayout внизу (layout_alignParentBottom = "true"), а затем выровняйте свой основной контейнер содержимого (любой тип макета, который вы хотите для определенного действия) выше этого. Используя android: вес на то, что вы положили в свое меню (например, ImageButton), а затем android: weightSum в контейнере меню, они будут равномерно распределены. Итак, если у вас есть четыре ImageButtons с android: weight = "1", а LinearLayout, содержащий их, имеет android: weightSum = "4", вы должны быть хорошими.

Таким образом, TabContentActivity может расширять Activity, а затем все ваши конкретные действия расширяют TabContentActivity. TabContentActivity имеет onCreate, который вызывает super.onCreate, а затем вызывает частный метод для создания меню. Затем, когда ваши производные классы вызовут super.onCreate в своем собственном onCreate, ваши «вкладки» построены. Вы можете иметь Enum в TabContentActivity, представляющий каждую вкладку, с локальной переменной этого типа Enum, чтобы указать, какая вкладка подсвечена.

Не слушайте людей, говорящих вам не делать этого таким образом. Если это пользовательский интерфейс, который вам нужен, не ограничивайте себя средой, в которой вы работаете. Так же, как у вас есть ответы, говорящие вам, что это не «правильный способ сделать это на Android», у вас также есть два голоса.

Не уверен, что эта идея работоспособна,

Установите TabLayout1 на нижнем колонтитуле, но настройте его так, чтобы отображались только вкладки, а не содержимое (которое было бы ниже нижнего колонтитула в невидимом пространстве).
Затем на втором экране появится второй вид, и вы можете переключать его. Если вы установите второй макет (верхний) в качестве вкладки TabLayout2 и привяжите вкладки к «Деятельности», вы можете поделиться этим представлением между действиями. Также обратите внимание, что вы должны настроить TabLayout2 в верхней части таким образом, чтобы вкладки не были видны только в области содержимого. Я думаю, что с некоторыми дополнениями можно решить.

Вот длинный выстрел, и я никогда не пробовал, чтобы посмотреть, работает ли он:

  • Создайте специальный класс, который содержит методы onClick для элементов в нижнем колонтитуле. import этот класс во все ваши действия;
  • Используйте android:onClick в прилагаемом файле XML со значениями, указывающими на методы в этом классе.

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


По моему мнению (и я подчеркиваю, что это просто мое мнение), эта парадигма интерфейса, как вы ее называете, является плохой попыткой скопировать iPhone. Эта парадигма очень популярна на iPhone, главным образом потому, что у нее есть только одна кнопка. Я даже ненавижу приложение Engadget для этого (и опять же, он скопирован из приложения iPhone) – он тратит экранную недвижимость.

Короче говоря, мой совет: используйте кнопку MENU .


Последнее примечание: никогда не играл с TabLayout , но если вы хотите отдельную Activity на каждой вкладке, то я на 99.9% уверен, что вы не сможете этого сделать (вы не можете встраивать целые действия в любой вид View или ViewGroup ). TabLayout только Layout , а не действия. Кроме того, с помощью TabLayout вы можете до свидания TabLayout кнопку BACK (вы собираетесь TabLayout еще одну кнопку для копирования пользовательского интерфейса с iPhone?) – если вы не планируете переопределить ее, и в этом случае вы можете до свидания Для ваших пользователей.