Есть ли лучший путь?
Поскольку мы не знаем, что вы строите, это невозможно сказать. Я согласен с замечанием Йони Самлана о том, что ListView
может быть достаточно для ваших нужд.
Почему фреймворк Android делает
расширить виджет так сложно?
Хотя вполне возможно, что переопределенный Gallery
может упростить вам настройку по-другому, основная команда Android должна сопоставить такое переопределение с другими приоритетами развития.
Одним из таких приоритетов является верность SDK. Они хотят убедиться, что в максимально возможной степени код, написанный для Android 1.5, может работать на Android 2.1 без изменений. Это ограничивает их двумя способами. Во-первых, они не могут просто изменить существующий Gallery
, например, чтобы удовлетворить ваши желания, если это заставит их сломать существующий API. Во-вторых, основная команда Android не будет раскрывать новые методы или классы, даже если они могут быть полезны сторонним разработчикам, если только и до тех пор, пока команда не будет готова поддерживать эти методы или классы в течение длительного времени.
Android изначально был написан до появления SDK. Вот причина, по которой большинство встроенных приложений (например, калькулятор) не могут быть созданы с помощью одного SDK, а должны быть созданы как часть образа встроенного программного обеспечения. Точно так же основная команда Android должна была принять решение, в рамках создания исходного SDK, о том, как наилучшим образом взять существующий код и создать общедоступный материал, с которым мы можем работать, и защищенный / закрытый материал, с которым мы не можем, с учетом точности SDK. Как вы могли заметить, Android огромен, и поэтому создание SDK заняло, соответственно, достаточно много времени. Переписав его, чтобы увеличить вероятность того, что кто-то, скажем, мог создать вертикальную Gallery
, он, вероятно, не был в начале списка.
Да, в идеальном мире мы могли бы с большей готовностью расширять встроенные виджеты и значительно изменять их поведение. Точно так же в идеальном мире у меня были бы волосы ...: -)