如何在 Android R 中设置全屏?

Vit*_*ira 23 android fullscreen android-layout android-5.0-lollipop android-11

我需要在我的应用程序中全屏显示一个屏幕。为此,我正在使用此代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    requestWindowFeature(Window.FEATURE_NO_TITLE)
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN)
    setContentView(R.layout.activity_camera_photo)
Run Code Online (Sandbox Code Playgroud)

但是,该WindowManager.LayoutParams.FLAG_FULLSCREEN标志已被弃用。

我的应用程序支持 Android Lollipop (API 21) 到 Android R (API 30)。使屏幕全屏显示的正确方法是什么?

And*_* D. 32

科特林

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
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,请尝试android:fitsSystemWindows="true"在布局文件中删除

爪哇

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
        );
    }
}
}
Run Code Online (Sandbox Code Playgroud)

  • `java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.WindowInsetsController com.android.internal.policy.DecorView.getWindowInsetsController()'` (7认同)
  • 你不能在`onCreate`中使用它,它应该在`onAttachedToWindow`中。检查 `public @Nullable WindowInsetsController getWindowInsetsController() { if (mAttachInfo != null) { return mAttachInfo.mViewRootImpl.getInsetsController(); } }` (2认同)

Man*_*ell 9

我有像 user924 这样的问题

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.WindowInsetsController com.android.internal.policy.DecorView.getWindowInsetsController()' on a null object reference

我可以通过 setContentView. 另外,通常情况下,全屏不仅没有状态栏,也没有导航栏。此外,只有hide()方法是不够的。如果我们只放这一行,当我们向下滑动屏幕看到状态栏时,它会下降,但不会再上升。通过设置systemBarBehavior,我们可以让状态栏和导航栏只在我们知道的全屏滑动时暂时出现。

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)
}
Run Code Online (Sandbox Code Playgroud)


Sau*_*rat 8

对于 API >= 30,使用WindowInsetsController.hide()

window.insetsController.hide(WindowInsets.Type.statusBars())
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案需要 sdk 版本的条件 (2认同)
  • `java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.WindowInsetsController com.android.internal.policy.DecorView.getWindowInsetsController()'` (2认同)