
Котлин — Джетпак и KTX
После серии постов об Anko было естественно перейти на KTX, в этом посте я покажу вам библиотеку от google, в которой есть много чего похожего на Anko и кое-что новое.
Прежде всего, откуда взялся KTX?
Что ж, Google обновляет набор библиотек для Android, старые библиотеки поддержки, предназначенные для уменьшения фрагментации операционной системы, были переименованы в androidx, а вместе с некоторыми новыми вещами, включая KTX, теперь они называются Jetpack. Эти инструменты призваны помочь разработчикам Android не только избежать фрагментации системы, но и иметь набор инструментов, которые сделают разработку Android приятной, продуктивной и производительной.
Итак, какова цель KTX?
Как и в случае с Anko, эта библиотека содержит набор функций kotlin и расширений для различных компонентов, которые помогут нам в нашей повседневной работе. Только ядро KTX содержит инструменты для графики, анимации, контента, настроек, текста, представлений и виджетов.
Закончив введение, давайте перейдем к делу. Нам нужно добавить библиотеку в проект, это делается путем добавления следующих вещей:
// in the project gradle file, the root gradle file just in case,
// we need to add the google repository
repositories {
google()
}
// on the module gradle file we need to add the library
dependencies {
implementation 'androidx.core:core-ktx:1.0.0'
}
Теперь мы можем начать пользоваться библиотекой! 🎉
В случае KTX документация для всех инструментов доступна как часть документации по Android, это проще, чем Anko, вам не нужно просматривать файлы библиотеки и проверять доступные функции и расширения.
Начнем с простых вещей из базовой библиотеки:
Мы хотим извлечь компоненты цвета:
val theColor = Color.RED // this could be a Long or Float too, //here it's Int theColor.component1() //alpha theColor.component2() //red theColor.component3() //green theColor.component4() //blue //an Int value theColor.toColorLong() //a Long value theColor.toColorInt()
В Kotlin есть методы для создания массивов, карт и других коллекций, с KTX вы можете создать объект ContentValues таким образом:
contentValuesOf(Pair("a", 0), Pair("b", 1))
Вы можете редактировать настройки, используя это:
//defaultSharedPreferences is from Anko, they work really well together huh?
//the commit is optional
`Context`.defaultSharedPreferences.edit(commit = true) {
putString("key", value)
}
Получить системную услугу можно таким образом:
val powman = `Context`.getSystemService<PowerManager>()
Некоторые помощники по растровым изображениям?:
myBitmap.toDrawable(getResources()) myBitmap.toAdaptiveIcon() myBitmap.toIcon() //also from a ByteArray myByteArray.toIcon() //And Uri myUri.toIcon() //from Drawable //parameters are optional myDrawable.toBitmap(width, height, config'Bitmap.Config') //Also here parameters are optional myDrawable.updateBounds(left, top, right, bottom)
Работать с Animator?:
myAnimator.addListener(onEnd = {animator -> Unit},
onStart = {animator -> Unit},
onCancel = {animator -> Unit},
onRepeat = {animator -> Unit})
myAnimator.addPauseListener(onResume = {animator -> Unit},
onPause = {animator -> Unit})
myAnimator.doOnCancel({animator -> Unit})
myAnimator.doOnEnd({animator -> Unit})
myAnimator.doOnPause({animator -> Unit})
myAnimator.doOnRepeat({animator -> Unit})
myAnimator.doOnResume({animator -> Unit})
myAnimator.doOnStart({animator -> Unit})
Доступ к компоненту Location?:
myLocation.component1() myLocation.component2()
Некоторые Uri помощники:
myUri.toFile() myFile.toUri() myString.toUri()
Создайте пакет, как и с другими коллекциями:
bundleOf(Pair("a", 0), Pair("b", 1))
persistableBundleOf(Pair("a", 0), Pair("b", 1))
Опубликовать вовремя?
val time = //uptime in millis Long
myHandler.postAtTime(time) { }
val delay = //delay in millis Long
myHandler.postDelayed(delay) { }
//both have an optional token parameter
Нам всегда нужно работать с текстовыми значениями, какие-то хелперы?
val numbers = "1234"
if (numbers.isDigitsOnly()) { /*will execute this*/ }
val text = "My text "
val count = text.trimmedLength() //will return the lenght without the space
val htmlString = "<b>MyBoldText</b>"
val spanned = htmString.parseAsHtml() //this method contains optional parameters to handle different scenarios
val newHtmlString = spanned.toHtml() //Also contains an optional parameter
val locale = Locale()
val direction = locale.layoutDirection
Для создания составного текста существует множество методов расширения, которые позволяют добавлять текст и форматирование. Вы можете перейти здесь для получения подробной информации о методах расширения.
Наряду с этим есть расширения для типизированных AtomicFile, SparseArray, LruCache, Range, расширения для преобразования в Half, Pair, Size, все они доступны по этой ссылке.
В следующем посте мы увидим больше о KTX, так как он охватывает только ядро, так как с Anko есть много вещей, которые можно использовать из этих библиотек, которые сделают ваш опыт разработки в Kotlin действительно приятным.