当前位置: 首页 > 知识库问答 >
问题:

如何将状态栏设置为透明,但导航栏保持为黑色?

吴高峰
2023-03-14

正如我的问题所暗示的那样,我正在试图弄清楚如何将我的状态栏颜色设置为透明,同时保持导航栏的黑色/自然色(不影响屏幕高度)。我提到了这个网站:Android完全透明状态栏?部分有效的解决方案之一是:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

但这将我的屏幕内容推送到导航栏下方,使其透明。我希望屏幕大小保持不变,同时保持导航栏的自然颜色。只是想让状态栏透明,但似乎所有其他方法都让它变白,即使我用(setstatusbarColor选项)设置它透明。

有什么办法吗?我的min SDK版本是23。

第二个视图是在状态栏工作的上方添加代码后的视图,但屏幕在下方滑动,使导航栏也透明(即使设置fitsystemwindows=false也没有帮助)。

提前感谢!

共有2个答案

卫博雅
2023-03-14

您需要在您的活动主题中添加以下样式。

样式中。xml找到活动的主题并添加以下内容。因为在你的情况下,SDK的最低版本是23,所以你不需要担心之前的Android版本。

<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowTranslucentStatus">true</item>

这是我得到的截图。

这是我的主题风格。

<style name="NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

希望这能解决你的问题。

鲁博赡
2023-03-14

试着做下面提到的事情可能会对你的例子有所帮助。如果你还面临这个问题,请告诉我。如果它能解决你的问题,那么请提供答案。

Androidanifest.xml

<activity
   ....            
   android:theme="@style/TranslucentStatusBarTheme">
</activity>

values-v23\style。xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="TranslucentStatusBarTheme" parent="AppTheme">
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowLightStatusBar">true</item>
    </style>
</resources>

活动。java

private static void setWindowFlag(Activity activity, boolean on) {
    Window win = activity.getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    if (on) {
        winParams.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    } else {
        winParams.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    }
    win.setAttributes(winParams);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    // Check if the version of Android is Marshmallow or higher
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        int newUiOptions = getWindow().getDecorView().getSystemUiVisibility();
        newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        getWindow().getDecorView().setSystemUiVisibility(newUiOptions
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
    // Check if the version of Android is Lollipop or higher
    else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        setWindowFlag(this, false);
        getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorTranslucent));
    }

    super.onCreate(savedInstanceState);
}
 类似资料:
  • 我不确定这是否可行,但我正在尝试在不使状态栏透明的情况下使导航栏透明。之所以选择后者,是因为我有一个工具栏,如果不是这样的话,它会在状态栏后面绘制。 现在,我正在使用一个fakeStatusBar布局,它显示在状态栏之前,这样用户就可以看到所有的东西: 唯一的问题是,在进行多任务处理时,缩略图看起来不太好,因为工具栏不在它应该位于的位置。

  • 当我设定时 状态栏变成黑色半透明,但我需要白色 样品

  • 我一直在Stack上寻找一些关于这个的指导,但是没有一个问题被问到这么深,答案也没有更新到最新的Swift版本,甚至没有更新到最新的Swift版本。 这是我所拥有的: 带有两个栏项目的导航控制器: 我的目标是:使导航根视图控制器的导航栏透明(但按钮和标题仍然可见),而不是子导航——没有奇怪的细微差别,比如之前的彩色闪光,或切断导航栏(参见gif) 我尝试过的事情: 在<代码>视图将出现(u动画:B

  • 只有在第一次打开应用程序时,半透明的状态栏才会出现问题。请看屏幕截图: http://i1335.photobucket.com/albums/w673/ductruongcntt/Screenshot_2014-06-26-14-17-26_zps1e9a56f4.png 以下是我使用的样式的XML,其中包括半透明状态栏: 我的主题是:

  • 我想在我的应用程序上有一个透明的状态栏(所以背景在后面),但我希望底部的导航栏保持黑色。 我可以通过设置

  • 我想制作一个完全透明的状态栏和导航栏,就像Google Play那样。当我使用窗口设置来实现它时,键盘会覆盖编辑文本。 当此代码使用键盘输入覆盖的编辑文本时: 此外,该代码并没有使其完全透明,它只是使其半透明 还是这个