Android Studio live templates

Live Templates can save typing out/remembering syntax for common blocks.

e.g. in a kotlin file type “comp” then TAB to create a compose function. You’ll get code like the following:

@Composable
fun $NAME$(modifier: Modifier = Modifier) {
    $END$
}Code language: Kotlin (kotlin)

Where you can type and tab between $NAME$ and $END$ so your focussed on what’s new rather than the common function definition code.

Some other examples to try out: toast, fun0, fun1, exfun, logd, ifn

Using ifn live template to create if null kotlin code
Using ifn live template

Live templates can be viewed/edited/added to in Android Studio settings.

Android studio live template settings listing all the default templates available
Android Studio live template settings

The variables within a live template can be edited and mapped to predefined functions so they pre-populate when the template is used

Editing template variables to use predefined functions for file and method name
Editing variables of the live template

List of functions available: https://www.jetbrains.com/help/idea/template-variables.html#predefined_functions


logmo

I use my custom live template logmo when debugging, this way I can very quickly add logs anywhere and filter for just those debug logs in logcat (package:mine monkeys)

The live template:

android.util.Log.d("MONKEYS", "$FILE_NAME$, $METHOD_NAME$: $content$");Code language: Kotlin (kotlin)

I set these variables:
FILE_NAME = fileName()
METHOD_NAME = methodName()

typing “logmo” then TAB outputs something like:

Log.d("MONKEYS", "DashboardViewModel.kt, saveFileNames: ");Code language: Kotlin (kotlin)

With the cursor in position ready to type the “content” which is the part I’m interested in to begin with.


timmo

The same idea can be used with Timber

timber.log.Timber.d("MONKEYS", "$FILE_NAME$, $METHOD_NAME$: $content$");Code language: Kotlin (kotlin)

With that live template setup typing “timmo” then TAB outputs something like:

Timber.d("MONKEYS", "DashboardViewModel.kt, saveFileNames: ");Code language: JavaScript (javascript)

mutsf

Set up a private mutable state flow with a public state flow

private val _$StateName$: kotlinx.coroutines.flow.MutableStateFlow<$StateType$> = kotlinx.coroutines.flow.MutableStateFlow($StateDefault$)
val $StateName$ = _$StateName$.asStateFlow()Code language: Kotlin (kotlin)

This creates the following code where you just have to fill in the name, type, and initial value

private val _name: MutableStateFlow<$Type$> = MutableStateFlow($default$)
val name = _name.asStateFlow()Code language: Kotlin (kotlin)

aid

For android view xml I have a template for adding an android id attribute.
(there are default templates for layout width and height – lh, lhm, lhw)

android:id="@+id/$END$"Code language: JavaScript (javascript)

$END$ defines where the cursor will end up. In this case meaning I can go straight to typing out the id I want

Using aid to enter a test id
Using aid live template

*this is maybe the least helpful example I’ve got here, as you can see in the gif android studio already knows what you want if you type aid, but it’s a useful example to see how live templates can work in other languages like xml.


Related links:
Official docs: https://www.jetbrains.com/help/idea/using-live-templates.html
Another explanation: https://medium.com/google-developer-experts/using-live-templates-to-improve-android-development-productivity-ca796ff78678
More ideas for custom templates: https://proandroiddev.com/android-studio-live-code-templates-to-save-your-time-coding-ff230495bf80
Templates for Timber: https://github.com/jdsingh/android-studio-timber-log-templates-for-kotlin