Posts
Animating your keyboard (part 1)
↗
↖
New WindowInsets APIs for checking the keyboard (IME) visibility and size
Suspending over Views — Example
·1950 words·10 mins
This blog post is the second of two which explores how coroutines enables you to write complex asynchronous UI operations in a much simpler way.
Suspending over Views
·1955 words·10 mins
Kotlin Coroutines allow us to model asynchronous problems like synchronous code. That’s great, but most usage seems to concentrate on I/O tasks and concurrent operations.
Gesture Navigation: immersive modes (IV)
↗
↖
In this fourth post, we’re going to cover what you can do if your app needs to draw across the entire screen, with the system bars hidden.
Gesture Navigation: handling gesture conflicts (III)
↗
↖
This is the third post in our series on Gesture Navigation. In this third post we’re going to cover how to handle any gesture conflicts, between your app and the new system gestures in Android 10.
Gesture Navigation: handling visual overlaps (II)
↗
↖
In part 1 of this series, we explored how you can make your app go ‘edge-to-edge’. Unfortunately this can result in some of your views being drawn behind the system bars, obscuring them from the user. This post explores how we can inset those views, moving them away from the system bars.
Gesture Navigation: going edge-to-edge (I)
↗
↖
With Android 10, a new system navigation mode has been added, allowing the user to navigate back, navigate to the home screen, and trigger the device assistant via gestures.
WindowInsets — Listeners to layouts
·1526 words·8 mins
If you’ve watched my ‘Becoming a Master Window Fitter’ talk, you’ll know that handling window insets can be complex.
Data Binding — Lessons Learnt
·1542 words·8 mins
The Data Binding Library (referred to as the ‘DB library’ for the rest of this post) offers a flexible and powerful way to bind data to your UIs, but to use an old cliché: ‘with great power comes great responsibility’.
CI cache key over many files
·495 words·3 mins
Here’s a quick tip for those of you using CircleCI, GitHub Actions, or any other CI which supports caching.