Compose Tooling

Chris Arriola
Android Developers
Published in
7 min readOct 7, 2022


Compose allows you to build beautiful UIs quickly. Together with the Android Studio tooling support, you’re able to accelerate the development process even further with faster iteration and better debugging.

So far we’ve looked at how to implement a single answer option in Jetsurvey, one of our Compose samples (previous article). Let’s see how Android Studio can help us write this efficiently.

If you’ve got any questions so far from this series on Compose Basics, we will have a live Q&A session on October 13th. Leave a comment here, on YouTube, or using #MADCompose on Twitter to ask your questions.

You can also watch the accompanying video to this article here:

Live Templates

When building composable elements for your app, you might find yourself frequently typing:

To help save on keystrokes, live templates allow you to insert common code snippets by typing an abbreviation. To insert the above code snippet, simply type “comp” followed by hitting the tab or return key to insert a composable function. From there, you can enter the name of the function, and you’re done 🏃‍♂️💨

“comp” live template to create a composable

You can also wrap the current composable with a Box (or another widget), Row, or Column by using the “W”, “WR”, or “WC” abbreviation, respectively. Since we want a Row in SurveyAnswer, we’ll use the “WR” abbreviation to generate it.

“WR” live template to create a Row

To see the full list of Compose-related live templates, navigate to your Android Studio’s preferences.

Android Studio preferences for Live Templates

Gutter icons

The first element within the Row is an Image composable. In the snippet below, we are using the painterResource API to fetch a resource drawable named “lenz” to be displayed in the Image.

One of the challenges when working with drawables is that it’s hard to know what the drawable looks like. To help with this, Android Studio shows an icon in the gutter of the editor making it quick and easy to switch to another image. Let’s go ahead and switch the image to display “Spark”.

Gutter Icon for drawables

Next, let’s implement the Text in the Row and give it a custom color. Let’s also implement the RadioButton and set it as unselected.

The color should also show up in the editor’s gutter. Clicking it gives us a color picker that we can use to quickly change the color. You can enter RGB, Hex, or easily pick colors out of the material color palette.

Gutter Icon for colors

Composable Preview

With our basic composable function, it’s time to see how this composable actually looks! It would be great to be able to see our composable while we work on it, without having to run the whole app on a device. This is made easy by creating a composable preview.

Using live templates, you can type “prev” followed by pressing tab or return. Doing this will generate a composable function with an extra @Preview annotation. Let’s call it SurveyAnswerPreview, invoke the SurveyAnswer composable wrapped within our app’s custom theme.

“prev” live template to create a preview for a composable

The @Preview annotation tells Android Studio that this composable should be shown in the design view of this file. Tapping the ‘Split’ icon at the top of the editor and clicking ‘Build & Refresh’ should then show the SurveyAnswerPreview composable!

Split view showing preview of a composable

The @Preview annotation should also have a gutter icon (⚙️) where we can specify all kinds of properties for the preview. For example, we can show the preview with a certain background color in night mode.

Configuring a preview composable using the gutter icon

You can add the @Preview annotation to the same function multiple times to preview a composable with different properties. For example, we can add another preview that shows SurveyAnswer with an extra large font.

Multiple preview annotations


Oftentimes, you’ll want to see how your composables look in different configurations — in light or dark mode, in different font sizes, and so on. With the multipreview feature, you can define an annotation class that itself has multiple preview annotations associated with it.

For example, we can define a FontScalePreviews annotation class that has two @Preview annotations for previewing a composable at different font scales, and a DarkLightPreviews annotation class that previews a composable in both light and dark mode.

To view these previews, simply annotate your preview composables with your newly created annotation classes.

Creating a new multipreview annotation

You can mix and match multipreviews in a way that fits your project. Larger projects might benefit from defining a multipreview annotation for each customisation vector (e.g. @FontScalePreviews, @DarkLightPreviews), combining those into use-case based multipreviews (e.g. @DesignComponentPreviews or @ScreenPreviews) and annotating preview composables with the most relevant one.

Preview on device

In addition to viewing previews in Android Studio, you can also deploy your previews directly to an emulator or device. To do so, you can use the run icon in the editor’s gutter. Instead of following the preview’s configuration parameters, this will use the configuration of the device being deployed to.

Previewing a composable on a device

Live edit of literals

When you update a composable, typically you have to build & refresh the preview or redeploy to the device to see your changes. With Live edit of literals, rebuilding isn’t necessary for certain constant literals like integers, strings, and colors. For example, if we update the name of our super hero, we see the changes being updated immediately. Similarly, we can change the color of the text without needing to rebuild.

Live edit of literals

Live Edit

Live Edit takes this behavior even further and lets you change the contents of a composable without needing to rebuild. Working on our SurveyAnswer, we can add modifiers, properties, or even remove or add child composables. All these changes are automatically reflected on your device.

Live edit

Live Edit is a new experimental feature, so right now it’s not available by default. Read the documentation to learn how you can enable it for your project.

Layout Inspector

With previews, multipreview, live edit of literals, and live edit, iterating on your design is a breeze. But, what if there’s something wrong with your composable, and you need to debug it? Android Studio allows you to dig deeper so you can figure out what’s wrong with the Layout Inspector.

The Layout Inspector allows you to explore all the nodes in the UI hierarchy. Highlighting an element also shows you all the attributes set for a particular element. For example, highlighting the RadioButton in our composable shows which line in our code implements the onClick handler which is quite useful when debugging.

Layout Inspector

The Layout Inspector also allows you to overlay an image on top of the layout to verify if your implementation is pixel perfect. In our case, we can see that there’s still some work to be done.

Layout Inspector with Overlay


That covers a lot of the helpful tooling provided by Android Studio to help us develop apps much faster in Compose.

To summarize:

  • With Live templates, we can insert common code snippets much faster using abbreviations
  • Contextual Gutter icons allow us to quickly change things like images and colors
  • The @Preview annotation allows us to see our composables without having to deploy the entire app to a device
  • Both the live edit of literals and live edit allow us to see code updates in real time

Got any questions? Leave a comment below or use the #MADCompose hashtag on Twitter and we will address your questions in our upcoming live Q&A for the series on October 13. Stay tuned!



Chris Arriola
Android Developers

Android Developer Relations Engineer at Google