This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Shows the system bars and returns back from fullscreen. | |
* @see hideSystemUI | |
* @see addSystemUIVisibilityListener | |
*/ | |
fun Activity.showSystemUI() { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { | |
// show app content in fullscreen, i. e. behind the bars when they are shown (alternative to | |
// deprecated View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION and View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) | |
window.setDecorFitsSystemWindows(false) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Registers a listener which is informed when UI is shown (true) or hidden (false). | |
*/ | |
fun Window.addSystemUIVisibilityListener(visibilityListener: (Boolean) -> Unit) { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { | |
decorView.setOnApplyWindowInsetsListener { v, insets -> | |
val suppliedInsets = v.onApplyWindowInsets(insets) | |
// only check for statusBars() and navigationBars(), because captionBar() is not always | |
// available and isVisible() could return false, although showSystemUI() had been called: | |
visibilityListener(suppliedInsets.isVisible(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Hides the system bars and makes the Activity "fullscreen". If this should be the default | |
* state it should be called from [Activity.onWindowFocusChanged] if hasFocus is true. | |
* It is also recommended to take care of cutout areas. The default behavior is that the app shows | |
* in the cutout area in portrait mode if not in fullscreen mode. This can cause "jumping" if the | |
* user swipes a system bar to show it. It is recommended to set [WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER], | |
* call [showBelowCutout] from [Activity.onCreate] | |
* (see [Android Developers article about cutouts](https://developer.android.com/guide/topics/display-cutout#never_render_content_in_the_display_cutout_area)). | |
* @see showSystemUI | |
* @see addSystemUIVisibilityListener |
NewerOlder