jetc.dev Newsletter Issue #328

Published: 2026-08-25

This week, we look at how API modules and composables interact and why your LazyColumn() might throw “measure is called on a deactivated node”. Plus, we see a Compose “select and copy text” for images and videos implementation, and we take a peek at Alex Styl’s latest creation!

One Off the Stack, One Off the Slack

You’ve got questions. That’s understandable!

How Can I Fake a Text Field?

While the question is more about having both InputTransformation and OutputTransformation on a BasicTextField(), the accepted answer gets at the core of the issue. The developer is trying to make a text field using a custom numeric keypad… in which case, BasicTextField() just gets in the way, and you are better served using Text() and simply rendering to resembled a text field. Learn more in this week’s highlighted Stack Overflow question, the first in quite some time!

How Many Recompositions Am I Making?

Partly, this is a question about terminology: if three composables recompose as a result of some state change, is that one recomposition or three? 🧐 Partly, this is a question about batching of state changes, and whether changing three separate State objects will result in three separate recompositions or just one? Learn more in this week’s highlighted Kotlinlang #compose Slack thread.

droidcon USA 2026

droidcon USA 2026 had several presentations related to Jetpack Compose, including:

Composable Commentary

Posts, videos, and other new information related to Jetpack Compose!

Medium: Sharing Feature-Based Composables Through API Modules

Humbet Humbetov explores what it would take to have a composable API without forcing a dependency on how that API does what it does. Humbet demonstrates using an interface with a @Composable function to serve as the API, allowing that API to be in an api module while an impl module can handle the actual rendering.

Medium: From Screens to Components: Building a Scalable Codebase in Jetpack Compose

Mathieu Perroud writes about how we can best divide up a composable screen into reusable components, by organizing the screen into sections and leaves, creating stateless composables for the leaves, and adopting a state-in/actions-out API for sections.

Medium: The press animation that never plays on a fast tap

Medium user Devsnack points out a limitation of using animateFloatAsState() to animate based on pressed state: a press is very short, so the animation does not animate very long. Reworking the logic to consider “pressed” to be a series of events leads to better results, allowing the animation to proceed to completion.

Medium: Jetpack Compose LazyColumn Crash: “measure is called on a deactivated node” — Root Cause and Fix

Swaran Singh Aulakh investigates “measure is called on a deactivated node”, which pops up as an IllegalArgumentException message sometimes when using lazy containers. At first glance, it will appear to be a framework issue, but it really stems from how well the app handles item lifecycle in lazy containers.

Resource Roundup

100% pure code!

GitHub: konvenant / K-Detect

GitHub user Konvenant created a Compose for Android library that allows “select and copy text” for arbitrary content, powered by ML Kit Text Recognition on the device. Use KDetectImage() for images and KDetectSurface() for paused video frames and the like.

GitHub: dbjpanda / kwery

Dibyajyoti Panda created a data caching framework for Compose for Android, modeled after TanStack Query, designed to handle refresh policies and the like for you. This suite includes a kwery-compose artifact with a rememberQuery() option for caching directly inside of a composable.

Compose Gradients

Alex Styl is working on a site that lets you choose a gradient and get the Compose code for a Brush that renders the gradient.

Notable Releases

Maps for Compose is up to 8.5.0, with more info window customization, plus bug fixes.

A Very Particular Set of Skills

Adding Compose capabilities to your coding agents!

Here are two more skill libraries for Compose development: