全屏显示,无导航栏和状态栏

15
我想创建一个全屏活动。没有像通知栏这样的上面的内容,也没有像Home按钮等下面的内容。我可以做到这一点,但我还想删除下面的Home按钮栏。 这是我的代码。

在此输入图片描述

    <style name="MyScreen" parent="@style/Theme.AppCompat.Light">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>
6个回答

25
你需要的是称为 沉浸式全屏模式 的功能。

enter image description here

// This snippet hides the system bars.
private void hideSystemUI() {
    // Set the IMMERSIVE flag.
    // Set the content to appear under the system bars so that the content
    // doesn't resize when the system bars hide and show.
    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);
}

// This snippet shows the system bars. It does this by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
    mDecorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

谢谢,它帮了我很大的忙。 - Muhammad Hasnain
1
@MuhammadHasnain请将答案标记为正确答案。 - Roman Samoilenko
如果您希望在一段时间后自动隐藏状态栏,请添加 View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY。 - Chitrang
这个已经被弃用了。你可以使用https://dev59.com/XlIG5IYBdhLWcg3w21iA#64828067替代。 - idontknow

4

/** * 隐藏导航栏和状态栏。 */

public void hideStatusBar() {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        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
                );
    }
}

2

如果在沉浸模式下,系统栏和导航栏仍有空间。请确保启动图像视图不位于插入它的框架布局中。如果是,请执行以下操作,即设置 android:fitsSystemWindows =“false”

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false">

1
这段代码在5.1上对我有效。
    View mDecorView = activity.getWindow().getDecorView();
    mDecorView.setSystemUiVisibility(View.GONE);

1
如果您在项目中使用了viewBinding功能,您可以在Fragment中这样做(未检查Activity):
private fun hideSystemUI() {
    binding.root.systemUiVisibility = (
        View.SYSTEM_UI_FLAG_IMMERSIVE
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN
        )
}

这段代码还可以防止在从此片段导航回上一个片段并且您的主活动具有底部栏时,您的底部栏跳起来。


现在它已经大部分被弃用了,但它帮助我入门。 - King Of The Jungle

-3
在你的活动类中以编程方式实现它:
public class ActivityMain extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // this will remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);
    }
}

谢谢你。但是我选择沉浸式全屏方法来获得我想要的结果。 - Muhammad Hasnain
哦,是的。弄错了。 - Zarul Izham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接