Status Update
Comments
re...@lunabee.com <re...@lunabee.com> #2
Thanks for filing Alex. Not handling it at all would be a burden for developers to handle IMO, as it will be hard to guess what sides are handled by top/bottom app bars and what should be handled by the content manually. It is probably better than claiming all the padding automatically, I agree.
Would this make sense for scaffold to handle and consume the insets on the sides where we have top and bottom app bar, so that the rest is handled by the application? Still not ideal, but at least it is easier to wire up when nesting is involved.
cl...@gmail.com <cl...@gmail.com> #3
I think even in that case, the Scaffold
isn't directly handling the insets itself: the underlying component of the top bar or bottom bar is.
I think having a WindowInsets
parameter like the app bars would be enough. Then the contract could be something along the lines of "By default, the Scaffold
will inset the content to avoid the safeDrawing
, either because there is an app bar taking up at least that much space directly or because the Scaffold
will inset it."
And that could be an opt-out point as well: Passing an empty window insets would keep the old behavior, and let the insets pass down insets down the hierarchy unaltered.
an...@gmail.com <an...@gmail.com> #4
the underlying component of the top bar or bottom bar is.
Right, but in cases when top or bottom app bars handle this insets, we need to make sure that those insets are claimed successfully so that they are not reapplied again? It becomes a burden of the scaffold to make sure this is done properly, otherwise content
code will have to check and adjust based on the top/bottom app bar presence, which is not ideal.
And that could be an opt-out point as well: Passing an empty window insets would keep the old behavior
Same here, I would like to avoid the cases where you would need to check the top/bottom app bar presence in the content lambda. Not sure it is completely possible though, i will look into it more.
sa...@persgroep.net <sa...@persgroep.net> #5
I would also like to throw in the following:
With the changes, the entire screen is now reduced in size when the keyboard appears.
This was not the case before the change and I would like to deactivate it again. Is it possible to add this as an option?
se...@google.com <se...@google.com>
ap...@google.com <ap...@google.com> #6
I would also appreciate the ability to turn off Scaffold
insets handling. We are handling insets on each screen, and this update made our app look odd (double insets all over the place). Fortunately, it's quite easy to fix it. But there is one thing that is not easily fixable.
We are using Scaffold
for the base structure on each screen, but most of our screens with LazyColumn are supposed to draw behind the navigation bar. But this is currently not easily possible with the Scaffold
. I know, I can remove the bottom inset from the bottom padding, but this is not a great solution.
Also, Scaffold's snackbarHost
slot (or SnackbarHost
) doesn't handle insets by default.
se...@google.com <se...@google.com>
na...@google.com <na...@google.com> #7
otherwise content code will have to check and adjust based on the top/bottom app bar presence, which is not ideal.
The usage I'm thinking of shouldn't have the content care if the top/bottom app bar is there.
Let's say the Scaffold
didn't interact with insets at all.
Then, the inner padding passed to the content will pass down the space information taken up by the app bars. That may or may not include the insets.
But what the content can do is do call consumedWindowInsets(innerPadding)
unconditionally. If there are app bars, then the height of those will be consumed so that they are not reapplied later. If there aren't app bars, then the innerPadding
will be empty, and the insets will be left available for an inner component to take into account.
I think that pass-through behavior should be available as an option for Scaffold
, to also handle the cases for the reasons highlighted above by others.
Description
Jetpack Compose version: 1.2.0-alpha06 Jetpack Compose component used: ScrollableTabRow Android Studio Build: Android Studio Bumblebee | 2021.1.1 Patch 2 Build #AI-211.7628.21.2111.8193401 Kotlin version: 1.6.10
Our design system requires custom tab padding between tabs and for the tab minimum width to be customized. Within the
ScrollableTabRow
, every tab has a constraint around a hard-coded minimum tab width, which disallows us from using the standardScrollableTabRow
composable.See the line:
I'm proposing that
minTabWidth
either be provided as an optional parameter on theScrollableTabRow
composable with an ability to not have a constraint set or that it hooks into the modifier.I'm also proposing that we have a separate, new
tabPadding
parameter so that we can customize the left and right padding of the view that is composed for the Tab. Currently, this is being created by theScrollableTabRow
for us and there is no way for us to customize it. It would be beneficial to allow developers to customize this.