如何在安卓平板电脑中隐藏底部系统栏

5

我正在开发一款仅适用于平板电脑的应用程序,要求在平板电脑的全屏上运行此应用程序。

为此,我在主活动中使用了以下代码:

getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

这段代码只会移除标题栏和操作栏。但是在平板电脑上,还有一个底部系统栏(带有主页和返回按钮)。我也想移除或隐藏这个系统栏。
我已经搜索过了,但只有以下解决方案:
1. 没有API可以删除或隐藏系统栏。 2. 您可以使用一些Android应用程序来隐藏系统栏。(例如:surelock、hidebar等)
我的问题是:
1. Android确实不可能吗? 2. 上述可用的应用程序(即surelock、hide bar等)也可以隐藏栏。这意味着他们正在使用某些东西来做到这一点。我们可以在我们的应用程序中使用这个东西,这样用户就不需要单独下载这些应用程序。
请指导我。
我知道这不是一个好主意。但我的应用程序只适用于Android 4.0或更高版本的平板电脑,并且该平板电脑仅运行此单个应用程序,因此我们不需要返回并使用主页按钮。这就是为什么我要求以全屏模式使用应用程序。

1
我认为隐藏系统栏不是一个好主意,因为这是用户实际上可以控制您的应用程序行为的地方 - 返回按钮/主页按钮。 - hardartcore
https://dev59.com/kGcs5IYBdhLWcg3wwmnA#12605313 - stinepike
4个回答

9
如果您拥有root访问权限,则可以使用此代码,否则不允许。
try{
    //REQUIRES ROOT
    Build.VERSION_CODES vc = new Build.VERSION_CODES();
    Build.VERSION vr = new Build.VERSION();
    String ProcID = "79"; //HONEYCOMB AND OLDER

    //v.RELEASE  //4.0.3
    if(vr.SDK_INT >= vc.ICE_CREAM_SANDWICH){
        ProcID = "42"; //ICS AND NEWER
    }



    //REQUIRES ROOT
    Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity "+ ProcID +" s16 com.android.systemui"}); //WAS 79
    proc.waitFor();

}catch(Exception ex){
    Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
}

See this


嗨,答案完全正常。但是我怎样才能再次显示该栏呢?你能帮忙吗? - mesopotamia

8

从Android API 4.0及更高版本开始,您可以使用以下代码隐藏底部系统栏。

View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

5

除非您拥有root访问权限,否则这是不可能的。或者,您可以创建一个启动器应用程序

否则,隐藏系统/导航栏将超出您的应用程序范围。


“只有在您具有根访问权限或创建了任何启动器应用程序的情况下,才有可能。”这句话是什么意思? - Manoj Agarwal
1
Android是基于Linux的操作系统。因此,与Linux一样,Android也有两种类型的用户:1.超级/根用户2.普通用户。现在,如果您获得了根用户访问权限或创建了任何应用程序(如Go Launcher或类似应用),那么只有这样才能实现您想要的功能。 - Shrikant Ballal
我如何获得我的应用程序的根访问权限?如果我有根访问权限,如何隐藏系统栏? - Manoj Agarwal
请完整阅读以下内容:http://www.androidcentral.com/root,以及隐藏系统栏,我猜你需要编写一些命令来实现它,但我以前从未这样做过。 - Shrikant Ballal
在对您的设备进行root之前,请确保您真的有充分的理由。 - Shrikant Ballal
1
@Shrikant,你能发布隐藏启动器应用程序底部栏的代码吗?我有同样的问题,我的应用程序是启动器。 - Karan

0

在网上进行了大量搜索后,我成功地使用以下代码让系统栏在4.2设备上隐藏和显示:

隐藏:

Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui");

对于API小于14的情况,可以使用79代替42。您可能还需要包含SET_DEBUG_APP权限,如果是这种情况,您需要使用系统密钥签名应用程序或将其安装在/system/app/目录中。

显示:

Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");

另外,有些人使用了-a选项(而不是-n选项),但这在我的设备上导致了错误:

错误:未找到;没有启动的服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接