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

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

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

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

6
задан Gunnar Lium 28 May 2010 в 12:33
поделиться

3 ответа

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

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

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

6
ответ дан 17 December 2019 в 02:24
поделиться

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

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

0
ответ дан 17 December 2019 в 02:24
поделиться

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

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

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


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

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


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

0
ответ дан 17 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: