Android - 使活动全屏显示状态栏

Uts*_*haw 31 android android-theme android-activity android-fullscreen android-statusbar

我想让我的活动全屏显示状态栏,就像这张图片一样:

在此输入图像描述

我在manifest内部activity标记中使用了此代码:

'android:theme="@style/Theme.AppCompat.Light.NoActionBar"'
Run Code Online (Sandbox Code Playgroud)

但我的观点并不是从状态栏开始的,它看起来像这样:

在此输入图像描述

我怎样才能让自己activity看起来像第一个?

Vis*_*kar 46

我知道,这个家伙问的问题可能已经找到了自己的解决方案,但对于谁仍在寻找解决办法的人来说,这是一个非常简单的解决方案,但有一点它有一个限制,直到Kitkat所以增加了一个条件

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                      WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
Run Code Online (Sandbox Code Playgroud)

  • 这样做的一个问题是它也与底部的导航按钮重叠。 (3认同)
  • 您想要带图标的ContextMenu吗?烦人的画面。您要键盘调整大小吗?哈哈哈不!使用`OnApplyWindowInsetsListener`可以像超级按钮一样工作,但是会在其他部分引起问题。 (2认同)
  • 它正在工作,但底部导航视图位于导航栏后面 (2认同)

tah*_*pam 26

将这些添加到您的基本应用程序主题styles.xml

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
Run Code Online (Sandbox Code Playgroud)

并将以下属性添加到父布局:

android:fitsSystemWindows="false"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • `android:fitsSystemWindows ="true"`,这对我不起作用. (3认同)
  • 并将影响每项活动 (2认同)
  • 它应该是 android:fitsSystemWindows="false"。我发布了编辑,现在正在等待审核。否则这就是正确的答案。 (2认同)

Pab*_*rra 11

如果你不希望你的"半透明导航"透明,这里的代码只是让状态栏变得透明

在你的主题中:

    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowTranslucentStatus">true</item>
Run Code Online (Sandbox Code Playgroud)

在你的活动onCreate:

Window window = getWindow();
WindowManager.LayoutParams winParams = window.getAttributes();
winParams.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
window.setAttributes(winParams);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

  • 节省了我的时间,正在寻找这个好几个小时.+1 (2认同)
  • 不为我工作。我的内容在导航栏后面 (2认同)

San*_*inh 7

1.透明状态栏

window?.decorView?.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
window.statusBarColor = Color.TRANSPARENT
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

2.透明状态栏和底部导航栏

    window.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
    );
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

3.隐藏状态栏

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        window.insetsController?.hide(WindowInsets.Type.statusBars())
    }
    else {
        @Suppress("DEPRECATION")
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

4.隐藏Statubar和Bottomnav栏

val actionBar: ActionBar? = supportActionBar
          if (actionBar != null) actionBar.hide()
         window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

把这段代码放在哪里?

   override fun onCreate(savedInstanceState: Bundle?) {

        /*  Put above code here ..... */
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_slider)
   }
Run Code Online (Sandbox Code Playgroud)

笔记

  • 我在 Pixel 3A 模拟器中检查了这段代码
  • 也许自定义不支持的android操作系统
  • 定型 <style name="Theme.FullScreen" parent="Theme.MaterialComponents.DayNight.NoActionBar">


Kis*_*nki 5

在此输入图像描述 要实现类似的效果,请使用:

1. 你的活动主题

<style name="FullScreenTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowActivityTransitions">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

2. 无需将android:fitsSystemWindows属性添加到根布局 XML 文件中。

3. 在您的活动中

将顶部填充添加到工具栏。我正在使用自定义工具栏,因此我向工具栏添加了状态栏高度的填充。

toolbar.setPadding(0, getStatusBarHeight(), 0, 0)
Run Code Online (Sandbox Code Playgroud)

并且该功能getStatusBarHeight()已添加到我的Utils class

fun Activity.getStatusBarHeight(): Int {
val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
return if (resourceId > 0) resources.getDimensionPixelSize(resourceId)
else Rect().apply { window.decorView.getWindowVisibleDisplayFrame(this) }.top
}
Run Code Online (Sandbox Code Playgroud)