隐藏状态栏  

您所在的位置:网站首页 手表BAR 隐藏状态栏  

隐藏状态栏  

2023-11-24 12:21| 来源: 网络整理| 查看: 265

本节课介绍如何在不同版本的 Android 上隐藏状态栏。隐藏状态栏(也可选择隐藏导航栏)可为内容腾出更多显示空间,从而提供更加身临其境的用户体验。

图 1 显示了具有可见状态栏的应用:

系统栏

图 1. 状态栏可见。

图 2 显示了状态栏已隐藏的应用。请注意,操作栏也会隐藏。 您不应在没有状态栏的情况下显示操作栏。

系统栏

图 2. 状态栏隐藏。

在 Android 4.0 及更低版本中隐藏状态栏

您可以通过设置 WindowManager 标记在 Android 4.0(API 级别 14)及更低版本中隐藏状态栏。您可以通过编程方式执行此操作,也可以在应用的清单文件中设置 Activity 主题背景。如果应用中的状态栏应始终保持隐藏,则首选的方法是在应用的清单文件中设置 Activity 主题背景(虽然严格来说,在需要时可以通过编程方式替换主题背景)。例如:

...

使用 Activity 主题背景的优势如下:

与通过编程方式设置标志相比,更易于维护且不易出错。 使界面转换更加流畅,因为系统在实例化应用的主 Activity 之前已经拥有了渲染界面所需的信息。

或者,您可以通过编程方式设置 WindowManager 标志。这种方法更便于在用户与您的应用互动时隐藏和显示状态栏:

Kotlin class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ... } Java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ... }

当您设置 WindowManager 标志时(无论是通过 Activity 主题背景还是通过编程方式),这些标志将保持有效,直到应用将它们清除为止。

您可以使用 FLAG_LAYOUT_IN_SCREEN 设置 Activity 布局,使其可用的屏幕区域与启用了 FLAG_FULLSCREEN 时一样。这可以在状态栏隐藏和显示时防止您的内容大小发生调整。

在 Android 4.1 及更高版本中隐藏状态栏

您可以使用 setSystemUiVisibility() 在 Android 4.1(API 级别 16)及更高版本中隐藏状态栏。 setSystemUiVisibility() 在单个视图级别设置界面标记;这些设置会聚合到窗口级别。与使用 WindowManager 标记相比,使用 setSystemUiVisibility() 设置界面标记让您可以更精细地控制系统栏。以下代码段会隐藏状态栏:

Kotlin // Hide the status bar. window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. actionBar?.hide() Java View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide();

请注意以下几点:

界面标志被清除后(例如,离开 Activity),如果您希望再次隐藏这些栏,应用需要重置这些标志。请参阅响应界面可见性更改,其中探讨了如何监听界面可见性更改,以便您的应用相应地做出响应。 在不同的位置设置界面标记会产生不同的效果。如果您在 Activity 的 onCreate() 方法中隐藏系统栏,那么当用户按主屏幕按钮时,系统栏会重新出现。当用户重新打开 Activity 后,系统不会调用 onCreate(),因此系统栏仍保持可见。如果您希望在用户进入和退出 Activity 时继续保留系统界面更改,请在 onResume() 或 onWindowFocusChanged() 中设置界面标记。 要使方法 setSystemUiVisibility() 生效,您调用它时所在的视图必须可见。 离开该视图会导致系统清除使用 setSystemUiVisibility() 设置的标志。

让内容显示在状态栏后面

在 Android 4.1 及更高版本中,您可以将应用的内容设置为显示在状态栏的后面,这样内容大小就不会随着状态栏的隐藏和显示发生调整。 可使用 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 执行此操作。 您可能还需要使用 SYSTEM_UI_FLAG_LAYOUT_STABLE 来帮助您的应用保持稳定布局。

当您使用此方法时,您要确保应用界面中的关键部分(例如,地图应用中的内置控件)不会被系统栏覆盖,否则会导致您的应用无法使用。在大多数情况下,要处理这个问题,您可以通过向 XML 布局文件添加 android:fitsSystemWindows 属性并设置为 true。这会调整父级 ViewGroup 的内边距,为系统窗口留出空间。这对于大多数应用来说已经足够。

不过,在某些情况下,您可能需要修改默认的内边距以获得应用所需的布局。要直接操控内容相对于系统栏的布局位置(占据的空间称为窗口的“内容嵌入”),请替换 fitSystemWindows(Rect insets)。 当窗口的内容嵌入发生更改时,视图层次结构会调用 fitSystemWindows() 方法,以允许窗口相应地调整其内容。通过替换此方法,您可以根据需要处理嵌入内容(以及应用布局)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3