如何在平板电脑中隐藏系统导航栏?

时间:2012-09-26 15:29:33

标签: android android-softbuttons

在我的平板电脑上,它有以下栏来控制回来,回家等(我不知道正确的名称,状态栏?控制栏?操作栏?或其他)

在程序中,它使用以下方法来全屏显示。

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

但我不知道为什么酒吧还在这里。因此,我无法获得正确的屏幕尺寸。

谁能告诉我如何删除它?

The Bar

9 个答案:

答案 0 :(得分:38)

似乎有一个 UNDOCUMENTED 标志

yourGreatView.setSystemUiVisibility(8);
  • 没有黑色页脚(“隐藏”系统栏)
  • 如果键盘显示(没有重叠输入)
  • ,则调整视图大小

在Android 4.1.2(API 16)上验证了 在Android 4.1.1(API 16)上验证了 已验证无法在Android 4.0.4(API 15)上运行

(所有平板电脑)

答案 1 :(得分:11)

在运行Android 4+的平板电脑中,无法隐藏系统/导航栏

documentation控制系统UI可见性部分):

  

SYSTEM_UI_FLAG_HIDE_NAVIGATION是一个请求的新标志   导航栏完全隐藏。请注意,这仅适用于   某些手机​​使用的导航栏(它不会隐藏系统栏   在平板电脑上)。

但是,您可以尝试在游戏和视频播放过程中对系统栏进行调暗。

  

SYSTEM_UI_FLAG_LOW_PROFILE标志取代了STATUS_BAR_HIDDEN   旗。置位时,该标志启用系统的“低调”模式   酒吧或导航栏。导航按钮暗淡和其他元素   系统栏也隐藏。启用此功能对于创建更多内容非常有用   沉浸式游戏,不会分散系统导航按钮。

答案 2 :(得分:4)

在Android 4.4及更高版本中,您可以完全隐藏导航栏,并使用全屏和沉浸感保持隐藏状态:

@Override
protected void onResume() {
    super.onResume();

    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

答案 3 :(得分:3)

非常核的选择是从/ system / app /中删除SystemUI.apk。但警告这将完全从平板电脑中删除它。我在平板电脑上进行此操作时,我正在使用前面板信息亭,然后我将平板电脑设置为启动到我的应用中。

答案 4 :(得分:2)

public class Utils {

public static void hideNavigations(Activity context) {
    View decorView = context.getWindow().getDecorView();
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

}

在您的活动中:

@Override
protected void onResume() {
    super.onResume();
    Utils.hideNavigations(this);
}

答案 5 :(得分:1)

正如其他人所说使用命令" pm禁用com.android.systemui"在root模式下,所以下面的代码在你的Android应用程序中执行这个命令,只需调用以下方法,你的平板电脑需要扎根。

private void hideNavigationBar(){
        try {
            Process process = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(process.getOutputStream());
            os.writeBytes("pm disable com.android.systemui\n");
            os.flush();
            os.writeBytes("exit\n");
            os.flush();
            process.waitFor();
            //////////////////////////////////////
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

此代码隐藏了android系统上的导航栏,重新出现系统栏使用" pm enable com.android.systemui"而不是" pm禁用com.android.systemui"在上一段代码中。

答案 6 :(得分:0)

由于系统栏用于在android中导航,没有一种简单的方法可以实现这一点,你可以对控件进行无效/暗淡处理:

View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);

但你可以在不使用systembar的情况下获得屏幕大小(不确定从哪个版本开始,我认为3.1)

Method rawW = Display.class.getMethod("getRawWidth");
Method rawH = Display.class.getMethod("getRawHeight");
int width = (Integer)mGetRawW.invoke(dp);
int height = (Integer)mGetRawH.invoke(dp);

如果您的应用具有超级用户权限,则还有一种方法可以实现:http://ppareit.github.com/HideBar/

答案 7 :(得分:0)

你不能隐藏它,但你可以简单地禁用它,除了家。试试this link.。使用SYSTEM_UI_FLAG_LOW_PROFILE可以调暗系统栏,使用onWindowFocusChanged()可以获得焦点并将其折叠。

答案 8 :(得分:0)

下面的代码对我有用 -

您可以在onCreate()或onResume(如果需要)

中编写它
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_IMMERSIVE
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);