How to set fullscreen in Android R?
KOTLIN
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_container) @Suppress("DEPRECATION") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.insetsController?.hide(WindowInsets.Type.statusBars()) } else { window.setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ) }}
if this doesn't help, try to remove android:fitsSystemWindows="true"
in the layout file
JAVA
class Activity extends AppCompatActivity {@Override@SuppressWarnings("DEPRECATION")protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_container); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { final WindowInsetsController insetsController = getWindow().getInsetsController(); if (insetsController != null) { insetsController.hide(WindowInsets.Type.statusBars()); } } else { getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); }}}
I had problem like user924
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.WindowInsetsController com.android.internal.policy.DecorView.getWindowInsetsController()' on a null object reference
I could fix this problem by adding full screen setting code after setContentView
. Also, usually, full screen will be screen without not only status bar, but also navigation bar too. Furthermore, just hide()
method isn't enough. If we put only this line, when we swipe down screen to see status bar, it comes down, but never goes up again. By setting systemBarBehavior
, we can make status bar and navigation bar appear temporarily only when we swipe just like full screen what we know.
setContentView(R.layout.YOUR_LAYOUT)//Set full screen after setting layout content@Suppress("DEPRECATION")if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { val controller = window.insetsController if(controller != null) { controller.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars()) controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE }} else { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)}
For API >= 30, use WindowInsetsController.hide()
:
window.insetsController.hide(WindowInsets.Type.statusBars())