0

我正在尝试隐藏/最小化 Android 4.0.3 中的系统栏。目前我正在做

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

onCreate我的活动中。一旦用户触摸屏幕,该栏就会再次出现。根据其他 STO 线程,这种行为是无法规避的。我的想法是在我的视图中捕捉任何触摸事件,并在显示后立即重新隐藏栏。在点击处理程序中运行上面显示的代码没有任何效果。如何实现(几乎)隐藏栏?

4

2 回答 2

1

我不会谈论“为什么”,只谈论“如何”:-)

那么,关于

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

这不会影响使用系统栏而不是单独的导航和状态栏的平板电脑设备。

在平板电脑上,您可以尝试(API 级别 14 起)

myView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

要检测事件,我认为您可以使用它来捕获事件:

myView.setOnSystemUiVisibilityChangeListener(
   new OnSystemUiVisibilityChangeListener()
      {
      public void onSystemUiVisibilityChange(int visibility)
      {
         if (visibility == View.SYSTEM_UI_FLAG_VISIBLE) {
            // TODO whatever you want
         }
         else {
            // TODO what to do in the other case
         }
      }
   }
);

更一般地说,这是来自“专业 Android 4 应用程序开发”的附加建议

将 UI 中的其他更改与导航可见性的更改同步通常是一种很好的做法。例如,您可以根据进入和退出“全屏模式”选择隐藏和显示操作栏和其他导航控件。您可以通过将 OnSystemUiVisibilityChangeListener 注册到您的视图来做到这一点 - 通常,您用于控制导航可见性的视图

.

于 2012-12-05T14:32:09.353 回答
0

你不能隐藏它,但你可以简单地禁用它,除了家。试试这个链接。. 使用 SYSTEM_UI_FLAG_LOW_PROFILE 您可以使系统栏变暗,并使用onWindowFocusChanged()可以获取焦点并折叠它。

于 2013-03-27T06:15:39.070 回答