Лучший способ повторно использовать меню нижнего колонтитула в Android - PullRequest
6 голосов
/ 28 мая 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 28 мая 2010

Вы можете сделать все ваши действия производными от общего базового класса, который расширяет 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», у вас также есть два повышающих голоса.

0 голосов
/ 28 мая 2010

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

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

0 голосов
/ 28 мая 2010

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

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

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


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

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


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

...