如何在我的应用程序中完全删除导航栏?

问题描述 投票:0回答:4

我正在创建一个Android应用程序,以便需要隐藏导航栏和标题栏。我能够从developer.android.com中解释的活动中做到这一点。

但我需要在整个应用程序中通过仅定义一次来实现这一点。

从某些论坛,以下代码将执行此操作:

 <style name="FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

我将这种风格应用到我的清单和爆炸中,标题栏已经消失了......但遗憾的是导航栏仍然存在..我们怎么能像这样删除导航栏?

请帮忙

android
4个回答
1
投票

或许总是强迫immersive-mode将实现你所需要的?您可以扩展Activity或AppCompatActivity并添加以下代码(从该页面获取):

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        decorView.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);
    }
}

这样,每当窗口具有焦点时,它将具有粘性沉浸感,这将使其覆盖导航和状态栏。我不是100%肯定你的“标题栏”是什么意思。

所以,做一个新的课程。呼叫是ImmersiveActivity,例如

public class ImmersiveActivity extends AppCompatActivity {

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        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);
    }
}
}

现在,当您想要创建新活动时,只需执行以下操作:

public class SomeOtherActivity extends ImmersiveActivity {

}

通过这种方式,基于此类的每个新活动都应该以沉浸式模式(当它具有焦点时)自动启动。


1
投票

在活动onCreate()添加下面的行setContentView()

  getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.activity_main);

1
投票

在你的AndroidManifest.xml中

将其添加到应用程序标记:

 <application
    ....
    android:theme="@style/FullScreen">

在styles.xml中:

<resources>
<style name="FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>
</resources>

1
投票

尝试在manifest.xml中包含Activity

<activity
        ...
        android:theme="@style/FullScreen">
...
© www.soinside.com 2019 - 2024. All rights reserved.