【问题标题】:Hide Status bar on Android Ice Cream Sandwich隐藏 Android Ice Cream Sandwich 上的状态栏
【发布时间】:2012-04-01 12:51:14
【问题描述】:

我正在开发 Android ICS 的启动器,但我在使用平板电脑时遇到了问题。

我无法隐藏状态栏。我已经在 Android 2.3.X 中尝试过,没关系。该问题仅在 Android 4.0 中出现。

如何隐藏它?

【问题讨论】:

    标签: android android-4.0-ice-cream-sandwich statusbar


    【解决方案1】:

    在 Android 4.0 中无法获得 100% 真全屏。

    使用以下方法使通知栏(又名状态栏、系统栏)变暗

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

    并用它来隐藏它

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

    而且,如果我猜对了,您正在尝试实现“信息亭模式”。您可以使用名为“surelock”的应用程序获得一些帮助。这会阻止所有“home”和“back”操作。

    它仍然不完美,但这可能是我们使用 Android ICS 可以实现的最佳效果。

    【讨论】:

    • 我真的很想知道 Surelock 是如何在我的应用程序中隐藏主页和后退按钮的。你能帮忙吗?
    • @Pascal SureLock 替换了您的默认启动器,因此当您按下返回或主页按钮时,您将返回到 SureLock。他们还有一个选项可以查找未列入白名单的进程并杀死它们。
    【解决方案2】:

    可以在有根的安卓设备上隐藏状态栏。程序Hidebar 通过杀死systemui 进程来做到这一点。该程序是开源的,因此您可以在source code 中阅读有关它的所有信息。

    见http://ppareit.github.com/HideBar/。

    【讨论】:

    • 请勿在 Android 4.0 ICS 上尝试此操作,因为 SystemUI 几乎负责所有事情,并会导致行为不稳定。它重置系统壁纸,删除底部软件按钮等。
    • @ppareit 的建议有效 +1,但应该让自己熟悉所涉及的风险
    • 谢谢@ile。较新版本的 HideBar 有一种新的更高级的方法来隐藏系统栏。 HideBar 还支持使用“Intents”的界面,以便其他应用程序可以要求隐藏系统栏。增加了权限,让用户知道允许哪些应用程序隐藏系统栏。如果您在自己的应用程序中需要这个,最好使用 HideBar 网站上提供的地址与我联系。
    【解决方案3】:

    您无法摆脱平板电脑上的系统栏。您也许可以摆脱手机上的导航栏和状态栏。请阅读the Android 4.0 SDK release notes 的“系统 UI 可见性控制”部分。

    【讨论】:

    • 好的...我无法隐藏它...但是我可以阻止/覆盖按钮的操作吗?
    • 为什么视频播放器是全屏并隐藏状态栏?
    • 视频播放器不隐藏ICS平板电脑的系统栏。
    • 可以禁用状态栏的某些按钮吗? (通知/设置和正在运行的应用程序)
    • @NachoMV:不。不过你可以调暗它们。
    【解决方案4】:

    我知道我的回答来得有点晚,但是在收集了来自不同地方的信息之后,我想出了这个,它只适用于有根设备:

        private void    KillStatusBar()
    {
        Process proc = null;
    
        String ProcID = "79"; //HONEYCOMB AND OLDER
    
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
            ProcID = "42"; //ICS AND NEWER
        }
    
        try {
            proc = Runtime
                    .getRuntime()
                    .exec(new String[] { "su", "-c",
                            "service call activity "+ProcID+" s16 com.android.systemui" });
        } catch (IOException e) {
            Log.w(TAG,"Failed to kill task bar (1).");
            e.printStackTrace();
        }
        try {
            proc.waitFor();
        } catch (InterruptedException e) {
            Log.w(TAG,"Failed to kill task bar (2).");
            e.printStackTrace();
        }
    
    }
    

    这应该消除任何已root设备上的底部栏并将其转换为“kiosk”模式。

    【讨论】:

      【解决方案5】:

      要在android 4.0中隐藏状态栏和导航栏,我们应该使用下面的代码:

      LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
      layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
      

      【讨论】:

        【解决方案6】:

        基于 ppareit 的回答。

        您无法在大多数库存设备上隐藏导航栏。但是,如果您可以选择生根设备,则可以解决此问题。以下是一种解决方案的步骤:

        1. Root device

        2. Install and run Busybox (required for taking full advantage of rooted device)

        3. Install HideBar from resource

        在 HideBar 中有一个在“Kiosk”模式下运行的选项,在该模式下无法重新显示导航栏。不用说,您确实需要小心这一点。

        【讨论】:

          猜你喜欢
          • 2012-04-13
          • 2012-05-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-17
          相关资源
          最近更新 更多