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

时间:2018-03-02 08:05:42

标签: android

我正在创建一个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>

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

请帮忙

4 个答案:

答案 0 :(得分: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 :(得分: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>

答案 2 :(得分:1)

尝试在 manifest.xml

中加入活动
<activity
        ...
        android:theme="@style/FullScreen">
...

答案 3 :(得分: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%肯定你的意思&#34;标题栏&#34;虽然。

所以,做一个新课。呼叫是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 {

}

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