隐藏状态栏

隐藏状态栏

本课介绍如何隐藏不同版本的

Android。通过隐藏状态栏(也可选择隐藏导航栏),

内容会占用更多的显示空间,从而提供沉浸感更强的用户体验。

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

图 1. 状态栏可见。

图 2 显示了状态栏已隐藏的应用。请注意,操作栏也会隐藏。

切勿在没有状态栏的情况下显示操作栏。

图 2. 状态栏隐藏。

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

在 Android 4.0(API 级别 14)及更低版本上,您可以通过将状态栏设置为

WindowManager 标志。您可以通过编程方式或通过

在应用的清单文件中设置 activity 主题。在应用的

如果状态栏应始终保持

(但严格来说,您可以通过编程方式替换

主题)。例如:

...

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >

...

使用 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 及更高版本中隐藏状态栏

在 Android 4.1(API 级别 16)及更高版本中,您可以隐藏状态栏,方法是

使用 setSystemUiVisibility()。

setSystemUiVisibility() 将界面标志设置为

单个视图级别这些设置会汇总到窗口级别。使用

setSystemUiVisibility(),用于设置界面标志

与使用 Google Kubernetes Engine 时

WindowManager 标志。以下代码段会隐藏状态栏:

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 的内边距

为系统窗口留出空间这对于大多数应用来说已经足够。

但在某些情况下,您可能需要修改默认内边距,以获得所需的

应用布局要直接控制

内容的布局方式是相对于系统栏

"content insets"),请替换 fitSystemWindows(Rect insets)。

fitSystemWindows() 方法是由

视图层次结构,以允许窗口

并据此调整其内容。通过重写此方法,您可以处理

边衬区(也就是应用的布局)。

相关推荐

英伟达显卡驱动打不开怎么办 原因及解决指南
beat365网站假的吗

英伟达显卡驱动打不开怎么办 原因及解决指南

🎯 07-07 💯 748
甑岛列岛
正规det365登录网站

甑岛列岛

🎯 07-01 💯 623