![](https://habrastorage.org/storage1/c5c07986/b8acdb0e/3a6195c1/1c0a16ca.png)
Покажу 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
Спасибо за внимание.