17 августа 2011 в 21:04

Быстрая разработка приложений с использованием библиотеки 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

Спасибо за внимание.
Меджид @Mecid
карма
16,2
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (24)

  • +2
    О, теперь шортики можно и в дороге почитать :)

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

    Может это будет уже не код в виде текста, а какие-то визуальные образы, висящие в голограмме, связанные между собой например разными типами линий, которые будут означать условия, последовательности и т.д.
    • +2
      • +1
        Уже.LabView
        image
        • 0
          Вот :) Сразу впомнились мои университетские годы. LabView рулит.
  • +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
      та же ситуация
  • +2
    А то что шрифты без сглаживания — деффект скриншота или оно на деле так?
    • +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)

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