👀 Want to see a preview of what's coming up in #JetpackCompose? We heard you that debugging shared elements is tricky. In 1.11.0-alpha03, a new composable LookaheadAnimationVisualDebugging was added. Wrap your SharedTransitionLayout to add visual cues to track down those hard to debug issues. 🐛⤵️
Alex Vanyo
@vanyo.dev
Android Software Engineer Helping build adaptive Compose everywhere!
I've converted my side project to Navigation 3 (or at least, a similar close fork of Navigation 3), which you can try out on the web here! alex.vanyo.dev/composelife Two more complex scene ideas I've been playing around with: A SceneStrategy wrapping another SceneStrategy, and derived entry lists.
Navigation 3 is here, and yes — it changes things 😅 Alex Vanyo & Don Turner break down what’s new, what’s better, and what not to do. Watch the VOD → youtu.be/I9Ws2Lxv0dw
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
youtu.be
Navigation 3 sets the stage for navigating with scenes! Be sure to tune in to @codewiththeitalians.it at cwti.link/twitch now to see @donaldturner.bsky.social and myself experiment with Navigation 3!
Every day this week we're publishing content to help you get started with Nav3. android-developers.googleblog.com/2025/12/lear.... Got questions? Post them using #AskAndroid and we'll answer them live at 9am PST on Friday here: www.youtube.com/live/JsugLEM....
Learn about our newest Jetpack Navigation library with the Nav3 Spotlight Week
News and insights on the Android platform, developer tools, and events.
android-developers.googleblog.com
A small change that flew under the radar for me for #JetpackCompose: calling setContent in a test more than once doesn't crash now! It's still a bit awkward to test Activity recreation, but the workaround is a lot easier now: issuetracker.google.com/271226817#co...
My talk on Navigation 3 from #dcldn25 is live (very impressive publishing from the droidcon team!). www.youtube.com/watch?v=j1Oi...
Navigating the future with Jetpack Navigation 3 - Don Turner | droidcon London 2025
YouTube video by droidcon & fluttercon
youtube.com
Anyone have a lint rule that warns against doing with(dispatchers.IO) because you almost certainly wanted withContext(dispatchers.IO) instead? Asking for someone who did something silly: github.com/alexvanyo/co...
The recording from my talk on how to handle configuration changes in Compose at #dcnyc25 is out! Hopefully this helps explain what android:configChanges is responsible for in #AndroidDev and why it's important to know what promises you make when setting it. www.youtube.com/watch?v=K5-9...
Handling configuration changes in Compose - Alex Vanyo | droidcon New York 2025
YouTube video by droidcon & fluttercon
youtube.com
It was great to see both familiar faces and new ones at #dcnyc25 last week - especially to see how everyone's figuring out what #AndroidDev will look like with the new tools are moving at a blistering speed. The slides for my talk are available here: alex.vanyo.dev/talks/configurationchanges
A response to the section on "How Can I Determine the Size and Position of Descendants of Peers?" Using onGloballyPositioned (or onSizeChanged, or similar modifiers) like this is a quick way to get yourself into trouble with layouts that take multiple frames to resolve that can flash or look janky.
I just sent out jetc.dev Newsletter Issue #273! Android Makers! @eevis.codes on accessibility focus *and* keyboard focus! FABs and FAMs! PWAs! jetc.dev/issues/273 #JetpackCompose #AndroidDev
Did you know... Android Studio has introduced resizable previews for Compose previews? Allowing you to test your layouts across the spectrum of device sizes easily inside Android Studio. 💻 developer.android.com/studio/previ...
It was great to see both familiar faces and new ones at #dcnyc25 last week - especially to see how everyone's figuring out what #AndroidDev will look like with the new tools are moving at a blistering speed. The slides for my talk are available here: alex.vanyo.dev/talks/configurationchanges
I'm excited to be speaking at #DroidconNYC next Thursday, hope to see you there! I'll be covering how to handle configuration changes in Compose, and specifically trying to answer the question of what you should put in android:configChanges and - probably more importantly - why. #AndroidDev
Thinking about configuration changes isn't optional. Imagine a website trying to prevent the browser window from being resized or breaking when it does. Android apps can't disable configuration changes and need to react to them correctly without losing state using the tools available.
If you could whisper one Android dev secret to every junior starting today, what would it be? Quote tweet this. Let’s build the Android wisdom tree 🌱
Hopefully you have a bunch of ideas to improve your apps from the first day of #GoogleIO Day 2 starts soon, be sure to tune in to learn about what's new in developer tools and my favorite topic, why and how to build adaptive! #AndroidDev
Scenes! If there's only one concept to call out for Navigation 3, it's scenes. The abstraction layer allows showing multiple panes at a time, and in different ways. It's the integration hook that integrates Navigation3 with ListDetailPaneScaffold in a flexible, satisfying way.
Today, we've released a brand new Jetpack library - Navigation3! A pure Compose, state based navigation library: android-developers.googleblog.com/2025/05/anno...
runComposeUiTest has a nice change in #JetpackCompose 1.9.0-alpha01 - the test body block now suspends! So you no longer have to do a nested runComposeUiTest { runTest { /* suspending test code */ } }, which could be funky since runComposeUiTest had an internal runTest before that wasn't exposed.
A small but extremely useful foundational API added in #JetpackCompose 1.8: LocalWindowInfo.current.containerSize It's the best way to get the size of the window, which should form the basis for any breakpoint logic for top-level layouts like window size classes. #AndroidDev
Days since forgetting a call to "key" in a loop and causing a hard to diagnose bug: 0 #JetpackCompose
🚀 Big news for Android devs using Jetpack Compose! Media3 just dropped version 1.6.0, and it includes a brand new artifact: media3-ui-compose! Finally, seamless and customizable video playback directly in your Compose apps. 🎬 #AndroidDev #JetpackCompose #Media3
We had so much fun filming #TheAndroidShow in Barcelona, at #MobileWorldCongress last week, we can't wait to share it with you! 🥳 Tune in TODAY 🚀 to watch the livestream: goo.gle/tas-mar25
Set your reminder: #TheAndroidShow is live *here* on March 13!
YouTube video by Android Developers
youtube.com
So the idea is with strong skipping, === is an extremely fast check. Imagine you have a lazy list and an array with a couple of hundred items, 3 on screen. Depending on the cost of equals, it's faster to let that higher level recomposition happen with ===.
UI that isn't tested is UI that can break. There are Compose techniques for each part of testing - quick verification when iterating, and automating both visual tests and behavior tests. And coming in Compose 1.8, don't miss the new DeviceConfigurationOverride.WindowInsets for testing insets!
✨ New Delightful Compose video is out! ✨ @vanyo.dev has some great tips on how to keep your UI delightful long term by testing it! Previews, screenshot testing, DeviceConfigurationOverride and other helpful tools are covered here: www.youtube.com/watch?v=Y9GW...
A 🧵 announcement: With the Jetpack Compose 1.8. beta01 release, you may notice that a significant number of APIs that were previously experimental, have been graduated to stable.
Android 16 will have some big changes around restricting orientation and aspect ratio by respecting the user's preferred orientation in more cases. Apps can no longer rely on assuming they have a specific aspect ratio to render in. For more details: android-developers.googleblog.com/2025/01/orie...
After figuring out how to make the coordinates work, it's so satisfying to use a live-updating drag and drop that previews where the dropped content will go.
Days since confusing myself with different frames of references and coordinate systems in Compose: 0
In-between traveling and holiday get-togethers, I finished up Advent of Code for the first time! And since I haven't done it before, now I have 9 years of past puzzles to work through (and without the pressure to start them at the exact time they open)
📽️🎞️ Aaand that's a wrap on our "Compose Tips for Delightful UI" YouTube series for this year 🥳 here's a quick summary of everything we've covered in '24! See you in '25 and happy holidays 🎄 medium.com/androiddevel...
Compose Tips for Delightful UI — ’24 wrap up
An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI.
medium.com
Editing some Java source, and this is the correct syntax for an annotation on a parameter with a fully qualified class name!? What? "android.graphics.@NonNull Insets safeInsets"