【Interface&navigation】启用全屏模式(53)


有些内容是全屏体验,如视频,游戏,图片库,书籍和演示文稿中的幻灯片。此页面显示了如何更全面地吸引用户使用全屏内容,并防止用户意外退出应用。

【Interface&navigation】启用全屏模式(53)

您可能想要启用全屏模式,以最大化应用程序的屏幕空间。但要注意用户跳入和退出应用程序检查通知,进行即兴搜索等的频率。使用全屏导致用户无法轻松访问系统导航,因此只有当用户体验的好处超出简单的额外空间时才应使用全屏模式(例如避免在游戏过程中意外退出或提供宝贵的身临其境的体验用于图像,视频和书籍)。

全屏选项


Android提供了三种使您的应用程序全屏的选项:Lean Back,Immersive和Immersive Sticky。在所有这三种方法中,系统栏都被隐藏,您的活动继续接收所有触摸事件。它们之间的区别在于用户如何将系统条带回视图。

以下是每个不同选项的描述。例如代码,跳转到 启用全屏模式。

往后靠

该往后靠模式是全屏体验,其中用户不会被沉重与屏幕的交互,如一边看视频。

当用户想要恢复系统栏时,他们只需在任何地方点击屏幕。

要启用后倾模式,请致电setSystemUiVisibility()并传递 SYSTEM_UI_FLAG_FULLSCREEN和 SYSTEM_UI_FLAG_HIDE_NAVIGATION。

当系统栏重新出现时,您可以收到回调以对UI进行其他适当的更新。请参阅响应UI可见性更改。
【Interface&navigation】启用全屏模式(53)

身临其境

【Interface&navigation】启用全屏模式(53)
【Interface&navigation】启用全屏模式(53)
该沉浸模式用于应用程序在用户将很大程度上与屏幕的交互。示例包括游戏,在图库中查看图像或阅读分页内容,如书籍或演示文稿中的幻灯片。

当用户需要带回系统栏时,它们会从隐藏系统栏的任何边缘滑动。通过要求这种更有意思的手势,用户与您的应用程序的互动不会被意外触摸和滑动中断。

扫描二维码关注公众号,回复: 2969696 查看本文章

为了实现身临其境的模式,呼叫setSystemUiVisibility()并通过 SYSTEM_UI_FLAG_IMMERSIVE与国旗一起 SYSTEM_UI_FLAG_FULLSCREEN和 SYSTEM_UI_FLAG_HIDE_NAVIGATION。

如果您的应用有自己的控件,当用户沉浸在内容中时不需要这些控件,请让它们消失并重新显示与系统栏同步。此建议也适用于您可能用于隐藏和显示应用控件的任何特定于应用的手势。例如,如果触摸屏幕上的任何位置切换工具栏或调色板的外观,那么它还应切换系统栏的外观。

当系统栏重新出现时,您可以收到回调以对UI进行其他适当的更新。请参阅响应UI可见性更改。

粘性沉浸式

在常规沉浸式模式中,每当用户从边缘滑动时,系统都会负责显示系统条 - 您的应用甚至不会意识到手势发生了。因此,如果用户可能实际上需要从屏幕边缘滑动作为主要应用体验的一部分 - 例如在玩需要大量滑动或使用绘图应用的游戏时 - 您应该改为启用“粘性”沉浸式模式。

在粘性沉浸式模式下,如果用户使用系统栏从边缘滑动,系统栏会出现,但它们是半透明的,并且触摸手势会传递到您的应用程序,因此应用程序也可以响应手势。

例如,在使用此方法的绘图应用程序中,如果用户想要绘制从屏幕最边缘开始的线条,则从边缘滑动会显示系统条形图并开始绘制从边缘开始的线条。几秒钟没有交互后,或者一旦用户触摸或手势在系统栏外的任何位置,条形图会自动消失。

为了使粘身临其境的模式,呼叫setSystemUiVisibility()并通过 SYSTEM_UI_FLAG_IMMERSIVE_STICKY与国旗一起 SYSTEM_UI_FLAG_FULLSCREEN和 SYSTEM_UI_FLAG_HIDE_NAVIGATION。

使用贴身式游戏,当系统UI可见性发生变化时,您无法接收回调。因此,如果您想要粘性沉浸式模式的自动隐藏行为,但仍想知道系统UI何时重新出现以便显示您自己的UI控件,请使用常规 IMMERSIVE标志并使用 Handler.postDelayed()或类似的东西重新输入几秒钟后沉浸式模式。

启用全屏模式


无论您要使用的全屏模式,你必须调用setSystemUiVisibility(),要么通过它SYSTEM_UI_FLAG_HIDE_NAVIGATION,SYSTEM_UI_FLAG_FULLSCREEN或两者兼而有之。您可以包括SYSTEM_UI_FLAG_IMMERSIVE(针对常规沉浸式模式)或SYSTEM_UI_FLAG_IMMERSIVE_STICKY(针对粘性沉浸式模式),也可以将两者都排除以启用后倾模式。

最好包括其他系统UI标志(例如 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION和 SYSTEM_UI_FLAG_LAYOUT_STABLE),以防止在系统栏隐藏和显示时调整大小。您还应确保同时隐藏操作栏和其他UI控件。

以下代码显示如何隐藏和显示活动中的状态和导航栏,而不调整布局以响应不断变化的屏幕空间:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        hideSystemUI();
    }
}

private void hideSystemUI() {
    // Enables regular immersive mode.
    // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
    // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // Hide the nav bar and status bar
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

您可能还希望实现以下内容以提供更好的用户体验:

要在状态之间提供无缝转换,请保持所有UI控件的可见性与系统栏同步。一旦应用程序进入沉浸式模式,任何UI控件也应该与系统栏一起隐藏,然后在系统UI重新出现时再次出现。为此,请实现 View.OnSystemUiVisibilityChangeListener接收回调,如 响应UI可见性更改中所述。
实施onWindowFocusChanged()。如果获得窗口焦点,则可能需要重新隐藏系统栏。如果您失去了窗口焦点,例如由于应用程序上方显示的对话框或弹出菜单,您可能希望取消之前安排的任何待处理的“隐藏”操作Handler.postDelayed()或类似的操作。
实现GestureDetector检测 onSingleTapUp(MotionEvent),允许用户通过触摸您的内容手动切换系统栏的可见性。简单的单击侦听器不是最佳解决方案,因为即使用户在屏幕上拖动手指(假设单击目标占据整个屏幕),它们也会被触发。

注意: 使用该SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志时,滑动会导致系统UI暂时显示为半透明状态,但不会清除任何标记,并且不会触发系统UI可见性更改侦听器。

附加示例代码


要使用不同的全屏模式查看更多代码,请参阅以下示例:

Android ImmersiveMode示例
Android BasicImmersiveMode示例
Android AdvancedImmersiveMode示例

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Interface&navigation】启用全屏模式(53)

猜你喜欢

转载自blog.51cto.com/4789781/2166942
今日推荐