Is there a way to hide the system/navigation bar in Android ICS
Asked Answered
Z

12

21

I'd like to extend the discussion regarding hiding of the system/navigation bar at the bottom of the screen on Android Ice Cream Sandwich (4.0 and up) tablet devices.

There's already a thread ( Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation ) about hiding the bar on Honeycomb devices. My clients, however, will be using the newest Ice Cream Sandwich devices and are very keen on hiding the bar at the bottom the screen. Their application is not for regular consumer use and it's very important for them to take over the whole screen to provide their experience. How possible is it to hide this bar -- or at least, override the behaviour of all the buttons -- without rooting the devices or rewriting its firmware?

Zingale answered 29/3, 2012 at 13:52 Comment(3)
possible duplicate of Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation - the answers for Honeycomb are still valid for ICSOlen
It appears there are significant differences between Honeycomb and ICS WRT the System Bar. See android.serverbox.ch/?p=306, particularly the response of December 29, 2011 at 17:20Kevon
He is indicating 4.0 and up. Google's VR effort has caused a new mode to exist as of 4.4 See comment below about immersive mode. developer.android.com/training/system-ui/immersive.htmlRedness
A
24

Check out SYSTEM_UI_FLAG_HIDE_NAVIGATION, this flag hides the navigation bar until the user interacts with the device. It was introduced in Android 4.0. You can enable this flag for example like this:

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

Note that the navigation won't disappear again automatically, you have to set it every time after the user interacted with the device.

Alternatively you can make the navigation less obtrusive by using SYSTEM_UI_FLAG_LOW_PROFILE, this changes the buttons into small dots (e.g. like the camera app).

Antagonize answered 29/3, 2012 at 13:56 Comment(4)
We've tried this. The ApiDemos for Ice Cream Sandwich have a screen that cycles through the different options for SystemUiVisibility. Nothing happens when we try SYSTEM_UI_FLAG_HIDE_NAVIGATION. Do you think this behaviour may be device dependent? We tried it on an Asus Transformer Prime.Zingale
I just tried it in the emulator, it works there as described. I only own a old HTC desire with hardware keys right now, so I can't test it on a real device. Might be device dependend, can't say for sure.Antagonize
Works but from docs "There is a limitation: because navigation controls are so important, the least user interaction will cause them to reappear immediately." i.e. as soon as user touches screen, they pop back.Pomeroy
you can also change your SDK version, for example, to <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17"/> and it won't showWendel
D
13

on rooted devices, i use the following adb command

adb shell pm disable com.android.systemui

to hide navigation bar permanently. To show it again, run

adb shell pm enable com.android.systemui

so far it's working fine for me

Dongdonga answered 21/3, 2014 at 6:59 Comment(9)
The device reboots when i run this disable command. Does this happen to you?Geithner
yes it does :) after reboot, it works fine until you enable systemUI again (and device will reboot again as well)Dongdonga
Thanks for the feedback. The reboot really bothered me so I am using the following command to hide the bars adb shell service call activity 42 s16 com.android.systemui and then to show the bars again I am execute this command: adb shell am startservice -n com.android.systemui/.SystemUIService This approach does not need a reboot and I thought I would share it with you in case you prefer it too.Geithner
If you are also unhappy with the wallpaper disappearing, I managed to fix this too. Have a look at this SO postGeithner
The adb shell pm disable com.android.systemui command did not work for me on the old nexus 7 (grouper). The device was rooted.Manhour
The adb shell pm disable com.android.systemui command did not work for me on the old nexus 7 (grouper). The device was rooted. The commands adb shell service call activity 42 s16 com.android.systemui did work on the device.Manhour
@Dallas187: Is there anyway we can use your command programatically?Beetner
Process suProcess = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); os.writeBytes("adb shell" + "\n"); os.flush(); os.writeBytes("service call activity 42 s16 com.android.systemui \n"); is the way you implement that in Java.Joachima
pm disable com.android.systemui returned: "Package com.android.systemui new state: disabled" But it was still visable. After reboot it was nolonger visable.Sloan
R
5

Using the below code is one way of doing it to hide navigation

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

But the problem with the above is that it becomes visible as soon as user touches the screen.

In Android Kitkat there is a feature called as IMMERSIVE which hides the notification bar and the navigation. It does not show even if the user interacts with the screen. However the user can make it visible by swiping it from top of the screen to bottom. Below is the code to achieve it

//Initializew this in onCreate()
View mDecorView = getWindow().getDecorView();

//Then call this function
private void hideSystemUI() {
     mDecorView.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_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

However in my case I never wanted the navigation and notification bar to be visible even if the user swipes from top of the screen to bottom. I gave it a try and I was able to achieve it partially. What I did was I implemented a CountDownTimerwhich would call hideSystemUI() every second or so. I know it is not the best way of doing it. But I did not get any other solution to do it.

If someone gets any then please let me know on how to permanently hide navigation and notification bar :) Hope this answer helps some one in future :)

Watch this video to better understand about this feature.

Reasoning answered 6/7, 2014 at 10:35 Comment(0)
W
3

Update - there is a work around which can be used for such cases (manually setting up the app for the client). Indeed, the navigation bar can't be removed within the given framework.

However, there is a solution to hide the navigation bar if rooting the device is an option for you. Here is how:

Root device

Install and run Busybox

Install HideBar

In HideBar there is an option to run in 'Kiosk' mode, in which there is no way to re-display the navigation bar. Needless to say, you really need to be careful with this.

Risks involved:

  • bricking the device

  • getting the installation of BusyBox wrong, which could get things a bit tricky, although is very unlikely to cause loss of information.

  • getting into a stalemate where you can't quit your app. For example if 1 your GUI doesn't provide a close option, 2 your app start automatically on start-up, 3 HideBar doesn"t allow any way of re-displaying the navigation bar and 4 HideBar hids the navigation bar on startup. However this can be overcome by simply stopping/uninstalling your app from adb.

Here are other identical questions:

Wiggs answered 17/11, 2012 at 15:40 Comment(4)
I would like to confirm it is really impossible on non-rooted ICS tablets. Is it true that there is no true full screen app for non-rooted ICS tablets in the market( not default apps shipped from reseller, they can use custom firmware to achieve the purpose, I want general app)? If it really exist one, let me know.Retroact
@神貓 I think the most famous application for non rooter ICS tablets is "SureLock": 42gears.com/surelock It has a free version, but it has some limits . If you try - can you please share if it you could use it successfully?Jalousie
"SureLock" have two options. "Disable Bottom Bar" and "Hide Buttom Bar". See at link. "Disable" do not require root but the bar still present. It is just make touching on the bar do not take effect. And for "Hide" ,it need root.Retroact
@神貓 so there you have it - even the most popular app can't hide the bar. I am putting my money that it is not possible without rooting.Jalousie
L
2

Although it's a hacky solution, I think it deserves attention because does not require rooting the device: getWindow().getDecorView().setSystemUiVisibility(8);.

Laundry answered 30/10, 2013 at 12:48 Comment(1)
Excause me. I don't think it would work on all tablets. I have seen that there are tablets with CUSTOM FIRMWARE can hide bar with this silmiar method but it is not general.Retroact
C
1

To hide status bar and navigation bar in android ics use

LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Corporeity answered 22/9, 2012 at 4:47 Comment(1)
tried this, but it still doesn't hide the navigation bar for meJalousie
R
1

EDIT: As of 4.4 (19) you can use the following to enable what is called "IMMERSIVE MODE". It was introduced for Google's Cardboard vrtoolkit, but can be used generally.

setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE)

https://developer.android.com/training/system-ui/immersive.html

From my efforts, it seems that: setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) does not work on tablets.

It does work on smartphones (tested with a Nexus 4 Mako), but it will reappear on a touch/click event. This also seems to capture focus to the bar, forcing you to click twice to regain focus to the view.

I have been trying to find a way to trap the event that actually redisplays the bar. No luck.

Being stubborn, I am going to download the android os code, fire up the eclipse debugger and go a-huntin. This is not a bug - the nav bar is crucial to app lifecycle.

I have seen apps do it (games and such) so there is a way without rooting.

Redness answered 20/10, 2013 at 1:55 Comment(1)
Which game is it? Is it available on the Play Store?Retroact
G
0

place this code in your application tag in manifest file to hide default tab bar

<Application
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" <!--
other parameters of application tag-->
>

and the then make a linear or relative layout and place it in your activity layout.

Gley answered 26/3, 2013 at 6:45 Comment(1)
This actually doesn't remove the navigation bar, but only the title bar.Linen
A
0

You can not hide it unless you have rooted the device. But of course there is a workaround which might not fit with your requirement but several well known apps in the market at the moment using this strategy to achieve this disable menu bar feature for their apps.

  • Grant admin privilege.
  • Set password & lock the device using device admin profile api
  • Then load what ever the UIs on top of the native lock screen. (Of course this will show background lock screen whenever a transition happens between activities. But if logic is organized well, then it will be smooth & less noticed by the user)
  • When need to enable back, reset password to "" using resetPassword("", 0) of device policy manager object.
Anjaanjali answered 10/7, 2013 at 12:51 Comment(0)
L
0

may be is the button behavor is enought you can have a look in my answer here

you still have the bar but you can't exit app without reboot tablet

Landmark answered 17/9, 2014 at 14:25 Comment(0)
E
0

You can hide the navigation bar on Android 4.0 and higher using the SYSTEM_UI_FLAG_HIDE_NAVIGATION flag. This snippet hides both the navigation bar and the status bar:

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions

See the following: Hiding the Navigation Bar

Expiation answered 23/2, 2015 at 21:0 Comment(0)
S
-2

If your device is rooted this code will help you to hide system bar on ICS (I tested it on Samsung Galaxy Tab 2 and it works excellent):

ArrayList<String> list = new ArrayList<String>();
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
    list.add(envName + "=" + env.get(envName));
}

// Array containing the environment to start the new process in
String[] envp = (String[]) list.toArray(new String[0]);

String hidingCommand = "while [ true ]\n" + "do\n" + "killall com.android.systemui\n" + "done\n";
Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp);

myContext.sendBroadcast(new Intent("com.mycompany.myapp.ACTION_BARHIDDEN"));
Sonde answered 7/2, 2013 at 9:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.