Быстрая разработка приложений с использованием библиотеки Greendroid



    Покажу Greendroid в работе на примере последнего разрабатываемого мной приложения (клиент для чтения сайта, кстати он недавно пиарился на хабре.

    Многие из вас наверно видели паттерны Google по разработке интерфейса аndroid приложений. Greendroid это библиотека которая реализует в себе паттерн ActionBar и много других виджетов интерфейса. Она позволяет сосредоточится на логики приложения, не думаю о создании и верстки ActionBar'ов, элементов списка и тд.



    Для использования этой библиотеки нужно обязательно использовать тему Theme.GreenDroid(или любую другу унаследованную от нее) и указать класс приложения унаследованный от GDApplication. Для чего это все нужно? 1. Тема нужна для того чтобы приложение знало как отображать кастомные виджеты, ради которых собственно мы и используем Greendroid. 2. Приведу пример приложения который используется у меня в коде.

    public class ShortikiApplication extends GDApplication {
    	@Override
    	public Class<?> getHomeActivityClass() {
    		return HomeActivity.class;
    	}
    }
    


    Это нужно для того чтобы ActionBar знал где стартовая позиция( главная страница приложения). Все просто, нужно только переопределить метод getHomeActivityClass вернув класс нужной нам Activity.

    Теперь можно использовать все возможности Greendroid. Начнем с ActionBar. Вот простой пример использования.

    public class ShortikiActivity extends GDActivity {
            @Override
    	protected void onCreate(Bundle savedInstanceState) {
                  	super.onCreate(savedInstanceState);
    		setActionBarContentView(R.layout.list);
            }
    }
    


    Вместо привычного setContentView используем setActionBarContentView они делают одно и то же за исключением того, что последний добавляет ActionBar в этот layout.

    Попробуем добавить элемент на ActionBar.

    addActionBarItem(ActionBarItem.Type.Refresh);
    


    Как видите Greendroid содержит в себе уже основные элементы ActionBar, так же есть возможность создавать свои Action. Вот класс перечисление говорящий сам за себя.

      public enum Type {
            GoHome, // A house
            Search, // A magnifying glass
            Talk, // A speech bubble
            Compose, // A sheet of paper with a pen
            Export, // A dot with an arrow
            Share, // A dot with two arrows
            Refresh, // Two curved arrows
            TakePhoto, // A camera
            // PickPhoto, // Two pictures with an arrow
            Locate, // The traditional GMaps pin
            Edit, // A pencil
            Add, // A plus sign
            Star, // A star
            SortBySize, // Some bars
            LocateMyself, // A surrounded dot
            Compass,
            Help,
            Info,
            Settings,
            List,
            Trashcan,
            Eye,
            AllFriends,
            Group,
            Gallery,
            Slideshow,
            Mail
        }
    


    Теперь попробуем обработать нажатие какого либо Action'a, для этого нужно переопределить метод

    @Override
    	public boolean onHandleActionBarItemClick(ActionBarItem item, int position) {
    
                    // обрабатываем событие
                    if (position == 0) {
                          //...
                    }
    
    		return true;
    	}
    


    Как видите все просто.

    На этом удобства при использовании Greendroid не заканчиваются. В эту библиотеку входит класс ItemAdapter это наследник класса BaseAdapter, который позволяет очень удобно заполнять лист.
    Покажу на примере. Заполнение листа цитатами в моем приложении происходит так:

         public ListAdapter createAdapter(List<RssItem> result) {
    		ItemAdapter adapter = new ItemAdapter(this);
    
    		for (RssItem rssItem : result) {
    			adapter.add(new LongTextItem(rssItem.getDescription()));
    			adapter.add(new SeparatorItem());
    		}
    
    		return adapter;
    	}
    
    //............
             listView.setAdapter(createAdapter(items));
    


    Объясню, метод Add должен получать в качестве параметра наследника класса Item, наследников класса Item из коробки в Greendroid достаточно и обычно хватает, хотя вы всегда можете сами реализовать нужный вам Item. Вот какие Item'ы уже есть: DrawableItem, LongTextItem, ThumbnailItem, SubtextItem, SubtitleItem, TextItem. За подробностями прошу читать документацию к библиотеке.

    Также в библиотеке есть несколько удобных виджетов, но об этом уже в следующем посте.
    Вот что получилось из всего этого: android клиент для shortiki.com

    Спасибо за внимание.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 24
    • +2
      О, теперь шортики можно и в дороге почитать :)

      По поводу кода — боюсь представить, насколько высокоуровневым может стать код, и на что он будет похож лет через… дцать.

      Может это будет уже не код в виде текста, а какие-то визуальные образы, висящие в голограмме, связанные между собой например разными типами линий, которые будут означать условия, последовательности и т.д.
    • +3
      А мне не понравилась эта библиотека, слишком строгая и тяжелая.
      Я бы предпочитал как набор виджетов, которые бы позволили просто добавить кастомные контролы.
      • +1
        что тяжелого?
        • +2
          Сама библиотека не маленькая, да и баги в ней есть, к примеру в QuickAction при использовании в Samsung Galaxy Tab 7" (1024 на 600) при нажатии на иконку просходит сильно искажение.
          • 0
            я думаю она достаточно удобная. можно пренебречь размерами
            • +2
              Тот же ActionBar средствами XML реализуется в 5 кб.
              • +1
                реализуется конечно) но сколько кода уже сделано за нас, там же не только верстка
              • +1
                Когда делает приложение, особенно для мобильных платформ, нужно в первую очередь думать об удобстве пользователей, а не своём.
                До сих пор у многих владельцев Android телефонов часто возникает проблема, чтобы такого удалить, чтобы установить новое приложение. И во многих случаях как раз потому, что разработчики считают, что «можно пренебречь размерами» и добавить огромную либу с аннотациями, только чтобы можно было не делать findViewById.

                Тоже считаю, что библиотека должна быть набором виджетов, чтобы в дистрибутив добавлялись только реально используемые.
                • +1
                  согласен, сам я не использую всякие аннотации, но greendroid это другое дело. кроме того она не так много весит 50 кб всего лишь.
        • +1
          1. можно ли модифицировать стиль action barа и его элементов? (цвет, размер, иконки, положение)
          2. ItemAdapter выглядит очень интересно, однако есть ли у него простой механизм использования своего row_layout?
          • +1
            1. можно я же написал это
            2. смотрите пункт 1
          • +1
            Рекомендую еще посмотреть ActionBarSherlock
            Выглядит довольно интересно
            • 0
              Я о нем в первую очередь подумал. ActionBarSherlock намного более развит, конкурентов значительных у этой библиотеки нет.
            • +2
              Фреймворки под Android (пока что), к сожалению, только запутывают. Особенно если твой код дальше поддерживается другими разработчиками. Т.к. куда проще вести документацию и вставлять комментарии, нежели посылать разработчиков к мануалам фреймворков. Да и сам я куда с больше охотой читаю нативный код, нежели код фреймворков в теле проекта.

              Попробовал несколько ActionBar библиотек и пришел к выводу, что таки проще написать свой. Свой кот роднее :)
            • +2
              А то что шрифты без сглаживания — деффект скриншота или оно на деле так?
            • +3
              Опишите процесс установки под Eclipse. Была как-то свободная минутка, попытался добавить тестовый пример + либу и словил кучу странностей в Eclipse. Всякие clean project, рестарты и переносы папок библиотеки не к чему не привели.

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

              Кому нужны виджеты, то их тьма есть уже отдельно реализованных. Пример моей небольшой собранной коллекции линков:

              1
              2
              3
              4

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

              Ах, да. Еще хорошая коллекция удобных классов на сайте CommonsWare, известных экспертов по дроиду.
              • +1
                1. скачиваем исходники Greendroid
                2. открываем eclipse'ом проект greendroid
                3. создаем свой проект
                4. указываем в настройках Android -> add library proejct и выбираем greendroid
                • +1
                  На самом деле так нужно сделать несколько раз, для каждого отдельного проекта либы.

                  А за шортики спасибо:) Израильский SQL-сервер — это конечно нечто:)
              • +2
                Большое спасибо за статью, открыл для себя shortiki.com)

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

                Самое читаемое