Уверен, из статей раз и два ты уже понял, что ][ любит этот сладкий от синтаксического сахара язык программирования. Наша сегодняшняя статья поможет и так не сильно загруженному 🙂 Kotlin-разработчику разгрузиться еще больше: с помощью библиотеки Anko ты избавишься от необходимости писать разметку интерфейса в XML и получишь доступ к множеству упрощающих разработку функций.
 

Немного об Anko

Anko — официальная библиотека Koltin для Android. Это не часть основного рантайма Kotlin и не обязательный компонент, а что-то вроде чемоданчика инструментов.

Ключевой компонент Anko — библиотека UI, которая способна существенно упростить программирование интерфейса. Чтобы понять, что это такое, рассмотрим, как мы обычно программируем интерфейс приложения. Для этого необходимо создать XML-файл с разметкой, с помощью графического интерфейса или вручную расставить лайоты и виджеты, присвоить каждому виджету ID, затем написать код, который найдет эти виджеты с помощью findViewById() и выполнит над ними какие-то действия (например, повесит на кнопку колбэк с обработчиком нажатия).

Это вполне нормальный и общепринятый метод описания интерфейса, он применяется во многих других фреймворках, средах и операционных системах. Но в нем есть множество проблем: код в XML не типобезопасен, его нельзя переиспользовать, XML обрабатывается на самом девайсе, из-за чего рендеринг интерфейса происходит медленно. В конце концов, писать и редактировать XML просто неудобно, даже несмотря на все, что делает Android Studio для ускорения этого процесса (о визуальном редакторе я молчу, его можно использовать только на этапе прототипирования, потом придется править руками).

Некоторые из этих проблем можно решить, если описать интерфейс прямо в коде. В Android есть для этого все средства, но они приведут тебя не в светлое будущее, а в ад. Код, описывающий интерфейс, будет очень громоздким, плохо читаемым и запутанным. Вместо вырвиглазного, но структурированного XML ты получишь бесконечные серии операций вида: создать объект, вызвать такие-то методы, создать еще один и такие-то методы, передать эти объекты методу другого объекта, а сам объект передать другому объекту и так далее на десятки и сотни строк вперед.

Anko предлагает очень элегантный способ решить эту проблему. Просто посмотри на этот код:

verticalLayout {
    val name = editText()
    button("Say Hello") {
        onClick { toast("Hello, ${name.text}!") }
    }
}

Эти шесть строк создают LinearLayout с вертикальным расположением элементов, размещают в нем строку ввода, под ней кнопку Say Hello, которая при нажатии берет текст из строки ввода и выводит на экран сообщение «Hello, <текст из строки ввода>!». И это, заметь, не какой-то отдельный язык описания интерфейса, а вполне обычный код на Kotlin.

Недурно, не так ли? В разы проще аналогичной разметки XML и тем более проще, чем интерфейс, описанный классическим способом. А выполнен он будет на 400% быстрее, чем код из XML.

Но и это еще не все. В четвертой строчке ты можешь заметить, что колбэку onClick в качестве аргумента передается лямбда с вызовом функции toast(). Эта функция тоже входит в состав Anko и фактически является более коротким эквивалентом такой строки:

Toast.makeText(context, "Hello, ${name.text}!", Toast.LENGTH_SHORT).show();

В Anko масса подобных шорткатов. Например, так можно запустить активность:

startActivity<SomeActivity>()

Это эквивалент следующих двух строк:

val intent = Intent(this, SomeOtherActivity::class.java)
startActivity(intent)

А так — показать диалоговое окно:

alert("Warning", "Anko is cool?") {
    yesButton { toast("Yes") }
    noButton { }
}.show()

Позвонить указанному абоненту тоже можно:

makeCall("002")

В этой статье не будем рассматривать все возможности Anko. Вместо этого мы напишем полноценное приложение, которое продемонстрирует скорость и удобство разработки с помощью Kotlin и Anko.

 

Пишем приложение

Наше приложение будет крайне простым, но полноценным. Мы сделаем countdown-таймер, чтобы он отсчитывал количество секунд, которое ты выберешь с помощью выдвижного меню слева (drawer), выводил на экран прогресс отсчета с помощью круга, а по окончании показывал toast-сообщение.

Несмотря на свою простоту, приложение научит тебя сразу нескольким весьма важным вещам:

  • создавать базовые графические элементы с помощью Anko: выдвижную панель, статус-бар, кнопки, прогресс-бары;
  • выносить код разметки из основного кода приложения c помощью компонентов Anko;
  • работать с фрагментами;
  • работать со сторонними виджетами;
  • использовать сопрограммы Kotlin, новую мощнейшую фичу Kotlin 1.1.
 

Создаем проект и подключаем библиотеки

Для создания проекта я рекомендую использовать Android Studio 3.0. Она хоть и носит статус «альфы», но прекрасно работает, а плагин Kotlin в нее уже встроен. Создаем новый проект, оставляем дефолтные настройки, а в самом конце выбираем Empty Activity. Так среда не будет за нас генерировать начальный код, который нам не нужен.

Никаких активностей, нам нужен «голый» проект
Никаких активностей, нам нужен «голый» проект

Когда проект будет создан, открываем build.gradle (Project) и добавляем репозиторий jitpack:

allprojects {
    repositories {
        // ...
        maven { url "https://jitpack.io" }
    }
}

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


5 комментариев

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

В гостях у чертёнка. FreeBSD глазами линуксоида

Порог вхождения новичка в мир Linux за последние десять-пятнадцать лет ощутимо снизился. О…