Using new IMMERSIVE mode in android kitkat

后端 未结 6 680
说谎
说谎 2020-12-14 01:56

I want to make an activity to go into IMMERSIVE mode and hide top and buttom system bars as soon as it starts.

In developers site of android they say I should use

相关标签:
6条回答
  • 2020-12-14 02:32

    Much nicer and credit to William J. Francis:

       public class GameActivity extends Activity{
    
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            /* my code you dont need this
            assets=getAssets();
            sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT);
            setContentView(sGame);  
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            */
    
    
            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 // hide nav bar
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
    
    @Override         
    protected void onDoSomethingOtherImportantThing(){
    ...
    }
    
    
    
    }
    
    0 讨论(0)
  • 2020-12-14 02:33

    android:immersive="true" will hide the Bottom system bars

    <application> 
     <activity
            android:name=".CarrierActivity"
            android:label="@string/app_name"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
             <action android:name="com.example.SetupWiz.SUW_CARRIER"/>
             <category android:name="android.intent.category.DEFAULT" />
           </intent-filter>
        </activity>
    </application>  
    
    0 讨论(0)
  • 2020-12-14 02:38

    Answer has already been given but here is How to utilize Immersive mode.

    In your activity:

    just before setContentview().......

    call the method: toggleHideyBar();

    Follow documentation documentation from Developer android and copy this method in your Activity.

    0 讨论(0)
  • 2020-12-14 02:40

    Chris Banes gist shows a nice Helper Class we can use to set the immersive mode for all Versions from HoneyComb to Lollipop https://gist.github.com/chrisbanes/73de18faffca571f7292.

    Update: I tried get it from his github repo to include in my project, but i had to clone the gist files into my project and adjsut the packagename. If someone knows how to include it properly as a dependency, u r welcome to help me.

    I added it in my FullScreenActivity i want to use the ImmersiveStickyMode like this:

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    
            final int flags = 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;
    
            SystemUiHelper uiHelper =  new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags);
            uiHelper.hide();
    
    
    
    }
    
    0 讨论(0)
  • 2020-12-14 02:46

    Get the decor view:

    getWindow().getDecorView().setSystemUiVisibility(...)
    

    Remember that the arguments are bit flags. Only call the method above once:

    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);
    
    0 讨论(0)
  • 2020-12-14 02:55

    You can create global function to go into immersive mode like:

    public static void enableImmersiveMode(final View decorView) {
            decorView.setSystemUiVisibility(setSystemUiVisibility());
            decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
                @Override
                public void onSystemUiVisibilityChange(int visibility) {
                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                        decorView.setSystemUiVisibility(setSystemUiVisibility());
                    }
                }
            });
        }
    
    
    public static int setSystemUiVisibility() {
            return 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;
     }
    

    Above code will also control system UI visibility change. Hope this will help you.

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