android沉浸式状态栏底部背景用图片代替

 

Android区分沉浸式状态栏与变色状态栏等详解我就不说了  网上描述太多了,可以参考:https://blog.csdn.net/u011835956/article/details/50997492,2.http://www.androidchina.net/3520.html,3.https://www.cnblogs.com/neillee/p/5402091.html,接下来我们说一下状态栏背景如何设置成背景图片,效果图如下:

android沉浸式状态栏底部背景用图片代替_第1张图片

 

 

Toolbar设置底色背景图片实现 步骤

 

1.创建toolbar_head_img.xml文件,如下:

 




    

    

    

    

        
    

 

2.values-->styles配置,代码如下:

 



    
    

    

    
    

 

3.values-v19配置,代码如下:

 



    
    

    



    
    

 

4.values-v21配置,代码如下:

 



    
    

    



    
    

 

5.对应的activity引入该布局,代码如下:

 

 

6.在activity中需要这样处理,代码如下:

 

  /**
         * android4.3以上的沉浸式 ,4.3以下没效果,所以不要头部填充状态栏高度
         */
        int sysVersion = Build.VERSION.SDK_INT;
        if (sysVersion > Build.VERSION_CODES.JELLY_BEAN_MR2 ) {
            int result = 0;
            int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
            if (resourceId > 0) {
                result = getResources().getDimensionPixelSize(resourceId);
            }
            LinearLayout toptop = (LinearLayout) this.findViewById(R.id.toptop);
            RelativeLayout.LayoutParams para = new RelativeLayout.LayoutParams(this.getWindowManager().getDefaultDisplay().getWidth(), result);
            //设置修改后的布局。
            toptop.setLayoutParams(para);
        }
        initView();

 

如果在相应的的activity中加入上面这段代码,我们导航会正确的显示,效果图如下:

 

android沉浸式状态栏底部背景用图片代替_第2张图片

 

如果不加入上面这段代码,显示效果如下:

 

android沉浸式状态栏底部背景用图片代替_第3张图片

 

 

 

另外一种设置:图片全屏显示

 

android沉浸式状态栏底部背景用图片代替_第4张图片

 

 

在AndroidManifest.xml中我们是通过设置这样的主题实现,具体设置如下代码;

 

  
        

 

体外话题,如果手机底部有虚拟键,比如华为的手机。我们在开发时,有时候遇到,我们的布局被虚拟键挡住了,我们该如何解决,直接有效的办法,就是在我们的布局最底层加一个控件,比如是LinearLayout,然后我们在代码中做这样的处理:

 

  /**
     * 底部如果有静态栏,往上托
     */
    private void bottomStatusBar() {
        //设置屏幕点击高度
        int totalHeight = GetScreenSize.getDpi(this);
        int contentHeight = GetScreenSize.getScreenHeight(this);
        int bottom = totalHeight - contentHeight;
        if (bottom > 0) {
            RelativeLayout.LayoutParams rh = (RelativeLayout.LayoutParams) mainBottom.getLayoutParams();
            rh.height = bottom;
            mainBottom.setLayoutParams(rh);
            ll_gbBootom.setPadding(0, 0, 0, rh.height);
        }

    }
mainBottom是我们的底部控件,ll_gbBootom在这里是他的父控件,这里我用的是:

 


    

        

 

GetScreenSize工具utils:
package com.artmofang.utils;

import android.content.Context;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;

import java.lang.reflect.Method;

/**
 * Created by LT on 2017/2/6.
 * 获取手机屏幕的高,宽,原始尺寸包括虚拟键位等
 */

public class GetScreenSize {

    //获取屏幕尺寸宽
    public static int getScreenWidth(Context context) {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        return outMetrics.widthPixels;
    }

    //获取屏幕尺寸高度
    public static int getScreenHeight(Context context) {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        return outMetrics.heightPixels;
    }

    //获取屏幕原始尺寸高度,包括虚拟功能键高度
    public static int getDpi(Context context) {
        int dpi = 0;
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics displayMetrics = new DisplayMetrics();
        @SuppressWarnings("rawtypes")
        Class c;
        try {
            c = Class.forName("android.view.Display");
            @SuppressWarnings("unchecked")
            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
            method.invoke(display, displayMetrics);
            dpi = displayMetrics.heightPixels;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dpi;
    }
}

 

 

domeo下载https://github.com/yangxiansheng123/ToolbarSetBg

 

你可能感兴趣的:(Android)