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

前端 未结 12 1732
面向向阳花
面向向阳花 2020-12-01 01:02

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.

相关标签:
12条回答
  • 2020-12-01 01:37

    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

    0 讨论(0)
  • 2020-12-01 01:38

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

    0 讨论(0)
  • 2020-12-01 01:40

    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.

    0 讨论(0)
  • 2020-12-01 01:43

    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:

    • Android tablet navigation bar won't hide

    • How to remove system bars on Android, I mean, all

    • Android tablet navigation bar won't hide

    • Is there a way to hide the system/navigation bar in Android ICS

    • Hide Tablet system bar

    • Real Fullscreen with Android 4 Tablets

    • Easy way to hide system bar on Android ICS

    0 讨论(0)
  • 2020-12-01 01:48

    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).

    0 讨论(0)
  • 2020-12-01 01:51

    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.

    0 讨论(0)
提交回复
热议问题