简体   繁体   English

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

[英]android - Transparent Navigation Bar but not Status Bar

I am not sure if it is possible but I am trying to make the Navigation Bar transparent without making the Status Bar transparent. 我不确定是否可以,但是我试图使导航栏透明而不使状态栏透明。 The reason for the later is I have a Toolbar that would otherwise draw behind the status bar. 稍后的原因是我有一个工具栏,否则它会在状态栏后面绘制。

Right now I am using a fakeStatusBar Layout that displays before the status bar so everything looks good to the user: 现在,我正在使用一个falseStatusBar布局,该布局显示在状态栏之前,因此对用户而言一切都很好:

    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);

The only problem is when going to multitasking, the thumbnail does not look good because the toolbar is not where it should be. 唯一的问题是,在进行多任务处理时,缩略图看起来不佳,因为工具栏不在应有的位置。

Not exactly what I wanted but I found a workaround using Translucent Navigation Bar. 并不是我想要的,但我发现了使用半透明导航栏的解决方法。 The final code looks something like this: 最终代码如下所示:

    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);
    }

Where top padding is added to the main layout of the activity. 将顶部填充添加到活动的主布局的位置。

If anyone knows how to do something similar with transparent navigation bar, perfect, but otherwise I am happy with my solution. 如果有人知道如何使用透明导航栏执行类似操作,那就太好了,但否则我对我的解决方案感到满意。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM