jetc.dev Newsletter Issue #125
This week, we look at updated instructions for using composables in a
window insets, and
movableContentOf() and JSON-defined, Compose-implemented forms. And
in “And One More Thing” I explain why you will be seeing fewer “more things”. 😞
Reviewing the release notes for the latest Jetpack Compose update!
Compose Compiler now has a
1.3.0-beta01, independent of the other Compose
libraries. Specifically, this beta adds support for Kotlin 1.7.10.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Sometimes, we need to have one composable overlap (on the Z axis)
another composable at a particular location, such as in a corner. You can
accomplish that using the
offset() modifier to adjust a composable’s position
after it has been positioned by something like
align(). See an example in
this week’s highlighted Stack Overflow question!
Sometimes, you need to know the size and/or position of some composable.
There are a variety of ways to get that, such as
onSizeChanged(). However, they all get fired on the
next composition, not immediately. Learn more about the limitations of these
approaches in this week’s highlighted Kotlinlang
#compose Slack thread!
Posts, videos, and other new information related to Jetpack Compose!
Google’s Chris Arriola updates Google’s recommendations for how to work with
composables as items in a
RecyclerView. The new approach requires pre-release
libraries (right now), but it allows for reuse of
when they are part of a
RecyclerView or similar pooled container.
Siva Ganesh Kantamani uses this post
AnimatedVisibility() to change the visibility of composables using
animations, as opposed to simple “smash cut” hiding and showing of those UI elements.
Siva looks at a variety of configuration options as well, from duration to
customizing the animation effects.
Zsolt Kocsi announces Appyx, yet another alternative for Compose UI navigation. Appyx skips the typical “define your app in terms of screens” approach, allowing you to navigate to any particular portion of the UI. As a result, navigation can work at any level, from a screen to a small screen element, because Appyx is just focused a state machine — you define the UI to be rendered for any given navigation state.
Jorge Castillo is back, taking a look at
movableContentWithReceiverOf(), functions that wrap compositions and make it
easy to “replay” those in another location within your composition tree. They
are designed for helping with shared element transitions, especially when
Other Interesting Links
- Positional memoization in Jetpack Compose
- How to change system bar colors using Jetpack Compose
- How to use CompositionLocal to implement Analytics in Jetpack Compose
- Medium: Dynamic Bottom Tabs for Jetpack Compose
- Video: TwoPaneLayout on Dual-Screen Devices
- Medium: Animated Splash Screen in Android with Compose
- How to understand Jetpack Compose code
- Requesting Location Permission in Jetpack Compose - UI UX
- Medium: Layouting in Jetpack Compose
- Medium: Mobile Development with SwiftUI and Jetpack Compose
100% pure code!
The Copper Leaf team has created a library that leverages the JSON Schema standard and the JSON Forms format for creating forms on the fly, such as for use as a server-defined UI system. This is available for standard Android-based Compose UI and Compose for Desktop.
Anaf Naufalian created a small wrapper around
MaterialTimePicker from the Material Components for Android, so that they can
be more easily used from composables. See Anaf’s tweet
for a screencast.
…And One More Thing
This section is going to appear only sporadically going forward, and I thought that I should explain why, along with providing a bit of history behind this newsletter.
I started the newsletter about 2.5 years ago. It was part of a plan to position me and my firm (CommonsWare) front-and-center in the world of Compose and Compose UI. I had grand plans for the jetc.dev domain as part of that, much more than the newsletter. However, the newsletter was an easy way to get some stuff going while I executed the rest of those plans, so I started there.
Except… I never executed the rest of those plans.
By this point, CommonsWare was floundering fairly badly. Shortly after starting the newsletter, I faced a choice: aggressively try to keep CommonsWare afloat, or just let it slowly fade while I worked full-time for somebody else. I took the latter route, which eventually culminated in CommonsWare becoming “a hobby with a logo” late last year.
The problem is: the firm I’m working for is not using Compose for much right now. We may get into it more starting later this year or early next year, but we have not decided that yet. Plus, I have not been doing a lot of hobby-level work using Compose, preferring to use 2022 to “decompress” a bit after 13.5 years as a freelance Android developer advocate.
Most of this newsletter does not require me to be doing Compose work “day-in and day-out”. However, many weeks this particular section is a struggle. That is part of the reason why I have taken a break from it a few times. Had I realized when I started the newsletter that things would work out the way that they had, I probably would not have included this section in the first place, or would have set it up to be sporadic from the outset.
So, rather than fight this section every week, I will cut back and only include it some of the time. I apologize to those of you who strongly value this section. My hope is that the rest of the newsletter, highlighting new posts and libraries pertaining to Compose and Compose UI, will still be worthwhile to you.
If you have any questions or concerns about this, feel free to reach out!
- 2022-11-15: Compose 1.3.1 and 1.4.0-alpha02! Android Developer Summit! Android Worldwide! Relay! Permissions! Showcase views! And... a not-quite-complete autocomplete?!?
- 2022-11-08: Tables! Relay! Shaders! Intrinsics! Integration tests! Mocking composables! And... this newsletter is becoming buttoned down?!?
- 2022-11-01: Compose 1.3.0 stable! Android Dev Summit videos! State machines! Relay! And... someone set us up the BOM?!?