有没有办法只显示android中的状态栏?

时间:2019-06-14 11:03:06

标签: android

我希望该应用仅显示状态栏,并使导航栏处于IMMERSIVE_STICKY模式。尝试了很多事情,但是导航栏保持不变,状态栏被隐藏了。素材主题可以与全屏功能搞混吗?

针对相同的问题尝试了其他相关问题,但是它们以黑客的形式解决了该问题,并且该解决方案的API版本较旧。这是我的主题属性和相关的设置代码:

<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">

        <item name="windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>```

2 个答案:

答案 0 :(得分:2)

根据此处的docs,您需要使用SYSTEM_UI_FLAG_HIDE_NAVIGATION才能隐藏底部导航栏。他们还通过了SYSTEM_UI_FLAG_FULLSCREEN标志,因为在隐藏导航栏时也可以隐藏状态栏是一种很好的做法。

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

如果我正确解释了问题,则您的要求不是隐藏状态栏,也不隐藏导航栏。因此,您不应在任何地方传递全屏标志。从上面的代码段中将其删除,并从主题中删除android:windowFullscreen。这应该使状态栏照常显示。

因此,您实际的uiOptions

int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

注意:如文档中所述,IMMERSIVE_STICKY仅确保导航栏区域中的任何触摸事件/手势也都传输到应用程序。如果用户在其中滑动,它将仍显示半透明的导航栏。如other answers中所述,如果没有某种形式的root访问权限,应该完全删除它是不可能的。


编辑:我最初使用AppCompatActivity和默认的Theme.AppCompat.Light.NoActionBar主题对此进行了测试。还使用OP的android:Theme.Material.Light.NoActionBar(需要使用Activity而不是AppCompatActivity进行测试)。他们俩都工作。

答案 1 :(得分:1)

1)通过代码,您可以使用以下方式隐藏操作栏。

class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    supportActionBar?.hide()
  }
}

此行supportActionBar?.hide()仅隐藏操作栏。请参见所附图片。

enter image description here

2)通过带有主题的XML

首先,在styles.xml中添加样式:

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

AndroidManifest.xml并将其应用于要隐藏操作栏的活动。

<activity
android:name=".MyActivity"
android:theme="@style/AppTheme.NoActionBar"/>