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

android——透明的导航栏,但不是状态栏

白淇
2023-03-14

我不确定这是否可行,但我正在尝试在不使状态栏透明的情况下使导航栏透明。之所以选择后者,是因为我有一个工具栏,如果不是这样的话,它会在状态栏后面绘制。

现在,我正在使用一个fakeStatusBar布局,它显示在状态栏之前,这样用户就可以看到所有的东西:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        Window window = getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

        //now the status bar is transparent too, which we have to fix

        //first we get status bar height
        int statusBarHeight = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        }

        //then we get the full width
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int screenWidth = size.x;

        //then we set that height to the fake item in the layout
        LinearLayout fakeStatusBar = findViewById(R.id.fakeStatusBar);
        ViewGroup.LayoutParams params = fakeStatusBar.getLayoutParams();
        params.height = statusBarHeight;
        params.width = screenWidth;
        fakeStatusBar.setLayoutParams(params);

唯一的问题是,在进行多任务处理时,缩略图看起来不太好,因为工具栏不在它应该位于的位置。

共有1个答案

汪翰墨
2023-03-14

不完全是我想要的,但是我找到了一个使用半透明导航栏的解决方法。最终的代码看起来像这样:

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

        //set navigation bar translucent
        Window window = getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        //now the status bar is translucent too, which we have to fix

        //first we get status bar height
        int statusBarHeight = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        }

        //then set it as top padding for the main layout
        ConstraintLayout mainLayout = (ConstraintLayout) findViewById(R.id.mainLayout);
        mainLayout.setPadding(0,statusBarHeight,0,0);
    }

在活动的主布局中添加顶部填充。

如果有人知道如何做一些类似的透明导航栏,完美,但除此之外,我很高兴我的解决方案。

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

  • 我一直在寻找一种方法,在状态栏完全透明(而不是半透明)的情况下重新给导航栏上色。要使状态栏完全透明,需要将布局标志设置为无限制,但这也会使导航栏失去颜色。有没有办法做到这一点?

  • 我需要一个屏幕,有一个完全透明的导航栏,但状态栏应该有彩色口音。 我尝试了不同的解决方案,但都不管用。 1-尝试使用XML更改颜色 当我尝试上面的代码时,导航栏如下图所示。这是不透明的 2-试图更改windowTranslucentNavigation 我试图设置android: windowTransLucentNaviation=true和android: windowTransLucentS

  • 我正在尝试为一个学校项目制作我的第一个应用程序。我有时会通过跟随其他人的问题和答案来获得半透明的状态栏,但是导航只是变成灰色,但是没有活动的内容,但是抽屉菜单在状态栏和导航栏下面绘制,我如何使活动也在状态栏和导航栏下面绘制? 在此处输入图像描述 在此处输入图像描述 在onCreate下,图2的代码为: WindowManager。布局参数。旗帜(半透明导航); 我试过使用android:fitsy

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

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