Создание пользовательского элемента управления или встроенные кнопки - PullRequest
0 голосов
/ 22 декабря 2009

У меня есть необходимость создать элемент управления, похожий на UITabBar, в iPhone, который должен присутствовать во всех действиях моего приложения. UITabBar, по сути, представляет собой набор кнопок, демонстрирующих поведение, аналогичное TAB: каждая кнопка отображается на действие. У меня есть два решения для этого:
1. В макете XML для каждого действия я вставляю элемент <LinearLayout><Button/><Button/><Button/></LinearLayout>. И затем есть общий класс слушателя, который будет обрабатывать нажатия кнопок. Таким образом, каждое действие будет иметь экземпляр этого слушателя.
2. Чтобы создать собственный виджет, расширяющий класс LinearLayout, поместите все кнопки в качестве статических членов и дайте ему обрабатывать нажатия кнопок. Включите этот пользовательский элемент управления на каждом экране.

Я не уверен, какой подход придерживаться. Пожалуйста посоветуй. Альтернативы также оценили

Вот что я думаю по этому поводу:
Проблема с первым заходом:

1. он сгенерирует много кода котельной пластины (findViewByIds, setOnClickListener и т. Д.)
2. При условии, что есть 5 действий и 3 кнопки вкладки, общее количество объектов Button, созданных во время выполнения, будет 5 x 3 = 15

Я бы хотел выбрать второй подход, потому что:
1. Весь код (состояние и поведение) будет инкапсулирован классом виджета. Меньше кода Boilerplate.
2. Так как кнопки будут статическими членами, общее количество объектов Button, созданных во время выполнения, будет только три. Хотя статические члены будут оставаться в памяти более долгое время (до тех пор, пока JVM не выгружает класс), так как элемент управления присутствует на каждом экране, я думаю, это может быть оправдано.

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Почему бы просто не использовать существующую реализацию TabWidget в Android?

http://developer.android.com/guide/tutorials/views/hello-tabwidget.html

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

В частности, вот некоторые проблемы, которые я вижу:

  1. Когда внешний вид панели вкладок из-за обновления системы изменится, вам придется переписать свой код. Вы также вряд ли будете точно соответствовать внешнему виду встроенной панели вкладок. (Подумайте, Java на OS X.)

  2. Каждый раз, когда пользователь нажимает на вкладку, он добавляет в стек еще одно действие. Это не только пустая трата памяти, но каждый раз, когда пользователь нажимает кнопку «Назад» на телефоне, он переходит на предыдущую вкладку. Это не способ, которым панель вкладок должна работать.

0 голосов
/ 25 декабря 2009

К сожалению, я не смог найти способ настроить встроенный TabWidget, чтобы он выглядел как UITabBar. Итак, я собираюсь создать пользовательский элемент управления и использовать кнопки в качестве статических элементов (второй подход). Элемент управления будет обрабатывать щелчки, как и ожидалось.
Я заметил, что отмеченное наградами приложение Plink Art также имеет элемент управления вкладками, похожий на iPhone UITabBar.

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