+
Core KTX - androidx.core.util
val array = SparseArray()
val value = array[42]
array[42] = "abc"
42 in array
array.containsKey(42)
array.containsValue("abc")
array.getOrElse(42) { "abc" }
array.forEach { key, value -> ... }
Slide 12
Slide 12 text
+
Core KTX - androidx.core.graphics
val color = Color.CYAN
val a = (color shr 24) and 0xff
val r = (color shr 16) and 0xff
val g = (color shr 8) and 0xff
val b = color and 0xff
val color = Color.CYAN
val a = color.alpha
val r = color.red
val g = color.green
val b = color.blue
+
Core KTX - androidx.core.graphics.drawable
val bounds = drawable.bounds
drawable.setBounds(10, bounds.top, bounds.right, bounds.bottom)
drawable.updateBounds(left = 10)
val bitmap = drawable.toBitmap()
Slide 15
Slide 15 text
+
Core KTX - androidx.core.os
TraceCompat.beginSection("my_trace_tag")
// some stuff to benchmark
TraceCompat.endSection()
trace("my_trace_tag") {
// some stuff to benchmark
}
Slide 16
Slide 16 text
+
Core KTX - androidx.core.os
val bundle = Bundle()
bundle.putInt("key1", 42)
bundle.putString("key2", "my string")
val bundle = bundleOf(
"key1" to 42,
"key2" to "my string")
Performance warning
Slide 17
Slide 17 text
+
Core KTX - androidx.core.os (bundleOf)
fun bundleOf(vararg pairs: Pair) = Bundle(pairs.size).apply {
for ((key, value) in pairs) {
when (value) {
null -> putString(key, null) // Any nullable type will suffice.
// Scalars
is Boolean -> putBoolean(key, value)
is Byte -> putByte(key, value)
is Char -> putChar(key, value)
is Double -> putDouble(key, value)
is Float -> putFloat(key, value)
...
Slide 18
Slide 18 text
+
Core KTX - androidx.core.os
handler.postDelayed({
// do something
}, delay)
handler.postDelayed(delay) {
// do something
}
handler.postAtTime({
// do something
}, time)
handler.postAtTime(time) {
// do something
}
Slide 19
Slide 19 text
+
Core KTX - androidx.core.text
val string = " abc "
val len = string.trim().length
val len = string.trimmedLength()
Bad
Good
Slide 20
Slide 20 text
+
Core KTX - androidx.core.text
Color
Italic
Bold
Red fox jumped over the lazy dog
Slide 21
Slide 21 text
+
Core KTX - androidx.core.text
val sb = SpannableString("Red fox jumped over the lazy dog")
sb.setSpan(ForegroundColorSpan(Color.RED), 0, 3, 0)
sb.setSpan(StyleSpan(Typeface.ITALIC), 8, 14, 0)
sb.setSpan(StyleSpan(Typeface.BOLD), 24, 28, 0)
Red fox jumped over the lazy dog
Bad
Slide 22
Slide 22 text
+
Core KTX - androidx.core.text
fun SpannableStringBuilder.append(text: CharSequence, span: Any) = apply {
val len1 = length
append(text)
val len2 = length
setSpan(span, len1, len2, 0)
}
Red fox jumped over the lazy dog
Better
Slide 23
Slide 23 text
+
Core KTX - androidx.core.text
val sb = SpannableStringBuilder()
.append("Red", ForegroundColorSpan(Color.RED))
.append(" fox ")
.append("jumped", StyleSpan(Typeface.ITALIC))
.append(" over the ")
.append("lazy", StyleSpan(Typeface.BOLD))
.append(" dog")
Red fox jumped over the lazy dog
Better
Slide 24
Slide 24 text
+
Core KTX - androidx.core.text
buildSpannedString {
color(Color.RED) { append("Red") }
append(" fox ")
italic { append("jumped") }
append(" over the ")
bold { append("lazy") }
append("dog")
}
Red fox jumped over the lazy dog
Good
Slide 25
Slide 25 text
+
Core KTX - androidx.core.widget
textView.doAfterTextChanged { text ->
// do something
}
textView.doBeforeTextChanged { text, start, count, after ->
// do something
}
textView.doOnTextChanged { text, start, count, after ->
// do something
}
Slide 26
Slide 26 text
+
Core KTX - androidx.core.view
view.isGone = true
view.isVisible = false
view.isInvisible = true
val start = view.marginStart
val bottom = view.marginBottom
view.updatePadding(left = 42)
view.updatePaddingRelative(start = 42)
view.postDelayed(100) { /* do something */ }
val bitmap = view.drawToBitmap()
+
Activity KTX
activity.onBackPressedDispatcher.addCallback(lifecycleOwner) {
// do something on back press
isEnabled = false
}
class MyActivity : AppCompatActivity() {
private val viewModel1 by viewModels()
}
Slide 36
Slide 36 text
+
Fragment KTX
androidx.fragment:fragment-ktx
Slide 37
Slide 37 text
+
Fragment KTX
fragmentManager.commit(allowStateLoss = true) {
add(MyFragment(), "my_tag")
}
class MyFragment : Fragment() {
private val viewModel1 by viewModels()
private val viewModel2 by activityViewModels()
}