Android ktx что такое

Русские Блоги

Что такое расширения KTX и Kotlin для Android?

1. Что такое KTX

A set of Kotlin extensions for Android app development. The goal of Android KTX is to make Android development with Kotlin more concise, pleasant, and idiomatic by leveraging the features of the language such as extension functions/properties, lambdas, named parameters, and parameter defaults. It is an explicit goal of this project to not add any new features to the existing Android APIs.

Google переводит следующим образом:

Набор расширений Kotlin для разработки приложений Android. Цель Android KTX — использовать языковые функции ( Например, функции / свойства расширения, лямбды, именованные параметры и параметры по умолчанию ) Сделать Kotlin Android Development Более лаконично, приятно и идиоматично , Четкая цель этого проекта — не добавлять какие-либо новые функции в существующий Android API.

На этом этапе также ясен принцип KTX, который заключается в использовании некоторых синтаксических особенностей Kotlin.

Но этот проект давно не обновлялся и находится в 1.0.0-alpha1, с нетерпением ждем появления стабильной версии 1.0.

В то же время,JakeWhartonЯ также призываю всех присоединиться к этому проекту и внести совместный код,

Пример официального сайта:

Kotlin:

Kotlin with Android KTX:

Kotlin:

Kotlin with Android KTX:

Kotlin:

Kotlin with Android KTX:

Kotlin:

Kotlin with Android KTX:

API-интерфейсы следующие: все, начиная с AndroidX, обновляются независимо, скорость обновления выше, чем у Android SDK, и может быть добавлена ​​непосредственно в библиотеку поддержки Android в будущем.

2. Что такое Android-расширения Kotlin

Kotlin Android Extensions — официальный плагин, выпущенный Kotlin, который улучшает опыт разработки Android

Он в основном имеет следующие функции:

1. View Binding

Каждый разработчик Android знаком с функцией findViewById (). Без сомнения, это источник потенциальных ошибок и неприятного кода, который трудно читать и поддерживать. Хотя есть несколько библиотек, которые могут обеспечить решение этой проблемы, эти библиотеки должны аннотировать поля для каждого представленного представления.

Плагин Kotlin Android Extensions позволяет нам получить те же возможности, что и некоторые из этих библиотек, без добавления дополнительного кода.

По сути, это позволяет следующий код:

Здесь textview используется в качестве расширенного свойства Activity и имеет тот же тип (т. Е. Тип TextView), который объявлен в activity_main.xml.

Если вас интересует его принцип, вы можете декомпилировать его в файл Java и просмотреть принцип реализации.На самом деле, внутри SparseArray есть поддержка всех представлений.

⚠️ Примечание: На самом деле Kotlin Android Extensions являются частью плагина Kotlin, поэтому для использования Kotlin Android Extensions вам не нужно устанавливать дополнительные плагины. Все, что вам нужно сделать, это включить его (конечно, если вы использовали плагин Kotlin gradle), то есть Добавьте в модуль build.gradle:

2. LayoutContainer Support

LayoutContainer и следующий Parcelable в настоящее время находятся на экспериментальной стадии и не рекомендуются для использования в производственных проектах. Если вы хотите включить его, вы можете добавить следующее в build.gradle:

Читайте также:  Что такое рст андроид

Плагин Android Extensions поддерживает различные типы контейнеров, такие как Activity, Fragment, View, но может быть реализован в любом Класс интерфейса LayoutContainer преобразуется в контейнер, используемый в ViewHolder в следующем коде:

3. Flavor support

4. View Caching

Вызов findViewById () может вызвать медлительность, особенно когда иерархия представления велика, поэтому представление плагина Android Extensions использует контейнер для минимизации вызова findViewById (). В следующем примере findViewById () вызывается только один раз:

Однако в следующих случаях кэшированное представление больше не будет использоваться:

5. Измените политику кэширования View

Вы можете изменить стратегию кэширования представления в контейнере глобально или только для текущего класса. Доступные методы кэширования: HASH_MAP, SPARSE_ARRAY, NONE. Ранее установленное по умолчанию значение HASH_MAP, теперь оно, по-видимому, заменено на SPARSE_ARRAY по умолчанию.

6. Доступная сериализация

Используйте следующим образом:

Требования к использованию, все сериализованные параметры записываются в главном конструкторе,

Можно также настроить логику сериализации

Поддерживаемые типы сериализации:

upported Types

@Parcelize supports a wide range of types:

  • Primitive types (and its boxed versions);
  • Objects and enums;
  • String , CharSequence ;
  • Exception ;
  • Size , SizeF , Bundle , IBinder , IInterface , FileDescriptor ;
  • SparseArray , SparseIntArray , SparseLongArray , SparseBooleanArray ;
  • All Serializable (yes, Date is supported too) and Parcelable implementations;
  • Collections of all supported types: List (mapped to ArrayList ), Set (mapped to LinkedHashSet ), Map (mapped to LinkedHashMap );
    • Also a number of concrete implementations: ArrayList , LinkedList , SortedSet , NavigableSet , HashSet , LinkedHashSet , TreeSet , SortedMap , NavigableMap , HashMap , LinkedHashMap , TreeMap , ConcurrentHashMap ;
  • Arrays of all supported types;
  • Nullable versions of all supported types.

Источник

Изучаем KTX для Android

Привет, «Хабр»! Прошло почти 9 месяцев с тех пор, как на Google I/O 2017 компания Google анонсировала Kotlin в качестве официального языка разработки под Android. Кто-то использует его как основной инструмент намного дольше, учитывая, что на нём можно было писать уже с середины 2014 года. В документации Google стали появляться примеры реализации на Kotlin. За это время разработчики смогли «потрогать» и оценить все преимущества этого языка. И многие, включая меня, думали: какой же шаг будет следующим? Support Library на Kotlin? Или что-то новое? И вот, встречайте: Android KTX! А мы представляем вашему вниманию перевод статьи, посвящённой его разбору.

5 февраля Google анонсировала выход библиотеки Android KTX, которая представляет собой набор расширений Kotlin для разработки приложений под Android. Этот шаг выглядит как логическое продолжение интеграции Kotlin в Android-разработку и добавление всех его преимуществ: меньше кода, больше удовольствия и облегчение понимания кода проекта.

Сейчас библиотека доступна только в preview и открыта для новых идей. Скорее всего, в ней будет значительно больше фичей и возможностей, когда её выведут в стабильную версию. Я писал эту статью, одновременно проглядывая документацию, и подумал, что хорошо было бы подробнее рассмотреть некоторые моменты. Вероятнее всего, вы сами начнёте изучать документацию лишь тогда, когда вам это понадобится. Но я надеюсь, что эта статья даст вам представление о том, что можно использовать уже сейчас. И если вы всё ещё не используете Kotlin, то поймёте, что вы упускаете.

Документацию по KTX вы можете найти здесь: core-ktx и саму библиотеку здесь: android/android-ktx.

Animator functions

Здесь собраны функции расширения, относящиеся к анимации. Давайте быстро пробежимся по тому, что доступно в текущем релизе.

Читайте также:  60 кадров секунду андроид

Animation listener

Для начала установим animation listener на animator:

Эта конструкция позволяет нам получать колбэки для событий анимации. Мы также можем использовать функции расширения для определённых колбэков от listener, нужно только реализовать функции, которые вы хотите получать:

Это солидное уменьшение кода за счёт отсутствия реализации тех колбэков, в которых мы не нуждаемся и которые не используем.

Отдельные listeners для событий анимации

У нас появилась возможность устанавливать listener на отдельные события: например, добавить listener на событие pause можно так же, как и функцию addListener():

Мы также можем «повесить» listener на событие анимации с помощью однострочного синтаксиса:

Если сейчас вы используете Java, то заметите, насколько меньше кода требуется для реализации и насколько легче это всё читается.

Content

Здесь мы рассмотрим функции расширения, добавленные в пакет Content. Если нам необходимо получить системный сервис, то расширение позволяет сделать так:

Styled attributes также будут работать при использовании функций расширения:

Выполнить операции записи для SharedPreferences теперь максимально просто с использованием функции расширения edit:

Мы также можем создать экземпляр ContentValues, используя функцию contentValuesOf, передав в качестве аргументов экземпляры Pair:

Time operations

KTX также предлагает использовать методы, относящиеся к работе со временем. Посмотрим, что мы здесь имеем.
Теперь можно получить DayOfWeek, Month и Year как Int-значение простым вызовом:

Класс Duration также имеет несколько доступных функций расширения:

Свойства Instant, LocalData, LocalDateTime, LocalTime могут быть получены следующими функциями расширения:

Так же, как в методах, перечисленных выше, доступ к свойствам классов MonthDay, OffsetDateTime и OffsetTime может быть получен через вызовы следующих методов:

Если вы используете класс Period, то библиотека KTX содержит несколько функций расширения для доступа к свойствам и операциям этого класса:

Ещё здесь есть несколько других функций расширения, которые могут быть использованы для получения необходимых значений:

Следующие функции расширения являются действительно хорошим дополнением и позволяют нам легко перевести Int-значение в необходимый класс, предусмотренный вызовом функции:

Так же это работает для Long-значений:

Здесь собраны функции расширения, направленные на взаимодействие с пакетом Android OS.
Они включают в себя несколько функций расширения для работы с классом Handler:

Создание экземпляра класса Bundle сейчас выглядит намного приятнее:

И если вы записываете trace events для Systrace tool, запись сообщений trace будет проще и красивее:

Utils

В пакете Util собраны функции расширения для работы с файлами, массивами и другими основными типами данных.
Если вы работаете с AtomicFiles, то вы можете использовать следующие функции:

Работа с классом Pair стала немного легче:

Мы также можем конвертировать Kotlin Pair в Android Pair:

Если вы работаете с классом Half, то благодаря KTX стало проще конвертировать в него данные других типов:

Используя функции расширения, теперь можно преобразовать экземпляр класса ClosedRange в Range:

Над экземпляром класса Range появилась возможность выполнять следующие действия:

Оба класса Size и SizeF могут использовать функции расширения:

Database Cursor

В данном разделе собраны функции расширения, доступные для класса Cursor. Каждая группа функций расположена в следующем порядке:

  • первая функция возвращает тип non-null, используя заданное имя столбца;
  • вторая функция возвращает тип данных (или null), используя заданное имя столбца;
  • третья функция возвращает тип данных (или null), используя заданный индекс.

SQLite

В данный момент для SQLite есть всего одна функция, но зато очень полезная. Она позволяет нам производить транзакции, используя заданные SQL-операторы.

Читайте также:  How to android file transfer для

Resources

Что касается ресурсов, то пока добавлены только те функции расширения, которые упрощают работу с классом TypedArray.

Примечание: Все throw пробрасывают IllegalArgumentException, если указанный индекс не существует.

Большинство приложений, над которыми мы (разработчики) работаем, используют текст в разным местах этих самых приложений. К счастью, в KTX есть несколько функций для работы с ним, в частности для класса SpannableStringBuilder.
Например, сразу после инициализации билдера мы можем использовать эти функции, чтобы добавить некоторый жирный текст в конец исходной строки:

Также есть build-функции, которые могут установить цвет фона или добавить отступы в текст:

И последняя функция — buildSpannedString, которая позволяет составить строку, используя вышеперечисленные функции расширения:

В пакете .net у нас есть одна функция, позволяющая с лёгкостью конвертировать строку в URI. То, что нужно!

Graphics

Пакет Graphics в KTX вышел довольно массивным, зато он даёт нам возможность легко реализовывать все визуальные тонкости приложения.
В первую очередь хотелось бы отметить функции, конвертирующие Bitmap (и не только) в следующие типы:

Далее рассмотрим ключевые операции для работы с Bitmap:

И работа с Canvas стала намного легче:

Также появилось несколько нововведений для Color:

Функция plus() действительно крута и позволяет нам смешивать два цвета и получить в результате смешанный Color!
Кроме этого, стало проще работать с матрицами. Теперь можно перемножить две матрицы и в результате получить один объект Matrix:

А ещё мы можем работать с Picture через функцию record, используя блок параметров, чтобы выполнить соответствующие действия:

Если мы хотим поменять границы drawable, то можем просто вызвать функцию updateBounds и передать ей размеры в качестве параметров:

Нужно произвести трансформацию на Shader? Без проблем!

Появилось несколько функций расширения для работы с классом PorterDuff:

Работая с классом Region, теперь мы можем использовать эти функции:

Классу PointF также добавили некоторые функции для упрощения:

Тоже самое доступно для класса Point:

И для класса Rect тоже:

Вы не удивитесь, но для RectF они также доступны:

При работе с классом Path мы можем использовать следующие варианты:

Велика вероятность, что при работе с графикой мы будем работать с типами данных Int и Long. Тип Int предлагает нам следующие функции в KTX:

С другой стороны, тип Long содержит немного больше функций:

Transitions

Итак, дойдя до класса Transition, мы видим, что здесь можно использовать функции расширения, аналогичные animation listeners:

Но есть небольшое отличие в синтаксисе метода для отдельных колбэков:

Views

Аналогичные функции были добавлены также и для класса View. Установка колбэков предельно понятна:

Метод postDelayed теперь доступен в качестве функции:

Обновление паддингов для View теперь намного легче и понятнее, для этого нам были предоставлены несколько функций:

Если вам нужно конвертировать View в Bitmap, то теперь это можно сделать одной строкой кода!

ViewGroup

Несколько достаточно крутых функций расширения были добавлены и для ViewGroup. Думаю, вам понравится! Например, проверка, содержит ли ViewGroup конкретную View:

Цикл по child ViewGroup (где it представляет собой child):

Доступ к child конкретной позиции в стиле Kotlin:

И несколько других операций с ViewGroup:

Margins

Так же, как и паддинги для View, мы можем добавлять margins для LayoutParams с помощью следующих функций:

Источник

Оцените статью