android沉浸式状态栏底部背景用图片代替
16lz
2021-01-23
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,接下来我们说一下状态栏背景如何设置成背景图片,效果图如下:
Toolbar设置底色背景图片实现 步骤
1.创建toolbar_head_img.xml文件,如下:
<?xml version="1.0" encoding="utf-8"?>
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中加入上面这段代码,我们导航会正确的显示,效果图如下:
如果不加入上面这段代码,显示效果如下:
另外一种设置:图片全屏显示
在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
更多相关文章
- 整理出15个Android很有用的代码片段
- 转:Android 对话框【Dialog】去除白色边框代码
- 浅入浅出Android(015):使用ImageView显示网络图片
- Github android客户端源代码分析之一:环境搭建
- Android Studio GitHub 提交项目代码
- 第一行代码 Android读书笔记(一)
- 【初用Android Studio】快捷键之代码提示