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

时间:2013-04-17 09:58:55

标签: android performance android-layout android-widget android-permissions

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

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

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

此代码段仅删除标题栏和操作栏。但在平板电脑中,有一个底部系统栏(有主页和后退按钮)。我也想删除或隐藏这个系统栏。

我搜索过,但只有以下解决方案:

  1. 没有用于删除或隐藏系统栏的API。
  2. 您可以使用某些Android应用隐藏系统栏。 (例如: surelock,hidebar等)
  3. 我的问题是:

    1. 在Android中真的不可能吗?
    2. 以上可用的app(即surelock,hide bar等)也隐藏了吧。 这意味着他们正在使用某些东西。可以用这个 在我们的应用程序中的东西,所以用户不需要下载这些 app seperatly。
    3. 请指导我。

      我知道这不是一个好主意。但我的应用程序仅适用于安装了Android 4.0或更高版本的平板电脑,平板电脑只能运行这个应用程序,因此我们无需返回并使用主页按钮。这就是为什么我的要求是使用该应用程序在全屏幕。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

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

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

答案 2 :(得分:5)

除非您具有root访问权限,否则这是不可能的。或者,您可以创建 launcher application

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

答案 3 :(得分:0)

在互联网上进行了大量搜索之后,我设法让系统栏隐藏并出现在4.2设备中:

隐藏:

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

或者对于少于14的API使用79而不是42.您可能还需要包含SET_DEBUG_APP权限,在这种情况下,您需要使用系统密钥签署应用程序或将其安装在/ system / app /目录中。

显示:

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

或者有些人使用-a(而不是-n)选项,虽然这会导致我的设备出错:

错误:未找到;没有服务开始。