Android: вертикальная галерея? - PullRequest
6 голосов
/ 20 февраля 2010

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

Итак, я сказал сам, ну, я посмотрю на класс галереи в исходном коде android и изменим его, чтобы вместо этого прокручивать вертикально. Не просто. Android SDK многое скрывает (по понятным причинам для поддержки фреймворка), но также очень усложняет расширение виджетов. Класс галереи, например, использует множество переменных-членов от своего родителя AbsSpinner (mSelectedPosition и т. Д.), А также от родителя его родителя и т. Д., Которые вообще недоступны с точки зрения разработчика приложения. Без доступа к этим переменным-членам я не могу использовать подобный код из класса галереи для собственного использования.

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

Есть ли лучший путь? Почему фреймворк Android так усложняет расширение виджета?

1 Ответ

12 голосов
/ 20 февраля 2010

Есть ли лучший путь?

Поскольку мы не знаем, что вы строите, это невозможно сказать. Я согласен с замечанием Йони Самлана о том, что ListView может быть достаточно для ваших нужд.

Почему фреймворк Android делает расширить виджет так сложно?

Хотя вполне возможно, что переопределенный Gallery может упростить вам настройку по-другому, основная команда Android должна сопоставить такое переопределение с другими приоритетами развития.

Одним из таких приоритетов является верность SDK. Они хотят убедиться, что в максимально возможной степени код, написанный для Android 1.5, может работать на Android 2.1 без изменений. Это ограничивает их двумя способами. Во-первых, они не могут просто изменить существующий Gallery, например, чтобы удовлетворить ваши желания, если это заставит их сломать существующий API. Во-вторых, основная команда Android не будет раскрывать новые методы или классы, даже если они могут быть полезны сторонним разработчикам, если только и до тех пор, пока команда не будет готова поддерживать эти методы или классы в течение длительного времени.

Android изначально был написан до появления SDK. Вот причина, по которой большинство встроенных приложений (например, калькулятор) не могут быть созданы с помощью одного SDK, а должны быть созданы как часть образа встроенного программного обеспечения. Точно так же основная команда Android должна была принять решение, в рамках создания исходного SDK, о том, как наилучшим образом взять существующий код и создать общедоступный материал, с которым мы можем работать, и защищенный / закрытый материал, с которым мы не можем, с учетом точности SDK. Как вы могли заметить, Android огромен, и поэтому создание SDK заняло, соответственно, достаточно много времени. Переписав его, чтобы увеличить вероятность того, что кто-то, скажем, мог создать вертикальную Gallery, он, вероятно, не был в начале списка.

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

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