Immersive mode navigation becomes sticky after volume press or minimise-restore

后端 未结 3 1946
执念已碎
执念已碎 2020-11-28 04:14
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.getWindow().getDecorView().setSyste         


        
3条回答
  •  悲哀的现实
    2020-11-28 05:01

    My solution is to set the UI-Visibility flags in three places:

    1. When getting the focus
    2. In onResume
    3. In the OnSystemUiVisibilityChangeListener listener

    The third solved my problem. The others might not be needed, but I left them. This is what is looks like:

      private void setupMainWindowDisplayMode() {
        View decorView = setSystemUiVisilityMode();
        decorView.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() {
          @Override
          public void onSystemUiVisibilityChange(int visibility) {
            setSystemUiVisilityMode(); // Needed to avoid exiting immersive_sticky when keyboard is displayed
          }
        });
      }
    
      private View setSystemUiVisilityMode() {
        View decorView = getWindow().getDecorView();
        int options;
        options =
            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;
    
        decorView.setSystemUiVisibility(options);
        return decorView;
      }
    

    setupMainWindowDisplayMode() gets called in onCreate().

提交回复
热议问题