Faisal Ahsan
Faisal Ahsan

Reputation: 918

Android : Smoothly hide soft keys

I want to hide and show soft key (home, back, menu) like youtube, when video is in full screen mode. I am using below code.

getWindow().getDecorView().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);

But it is not like youtube, it disturb the whole view on hide and show.

I know, I am missing something. But I don't what I am missing...

Upvotes: 1

Views: 1113

Answers (2)

AnujDeo
AnujDeo

Reputation: 333

All you want is Immersive mode. Try below code in your Activity.

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            getWindow().getDecorView().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);
        }
    }

Upvotes: 0

Tony
Tony

Reputation: 2451

Try This,

   void enableImmersiveMode() {

    ((FrameLayout) mToolbar.getParent()).setFitsSystemWindows(false);

    // True immersive mode is available only for android API 19 and above,
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
        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 // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

    }

UPDATE: Disabling the immersive mode should be like this,

private void disableImmersiveMode() {

    ((FrameLayout) mToolbar.getParent()).setFitsSystemWindows(true);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        mDecorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }

This way, you should see the jerk only one first call of enableImmersiveMode().

Upvotes: 0

Related Questions