Android开发这么久了,肯定会遇到因为不同手机自带的app状态栏不一样的问题,刚好公司最近有一个需求就是把状态栏定义成相同的颜色,也符合Material Design风格,于是查看了google 的 Android SDK以及在前辈的博客帮助下,我找了相关代码。先测量出状态栏的高度:
然后通过高度给状态栏添加设置自定义颜色的布局:
下面就贴出我的代码:
// 获取手机状态栏高度
-
public int getStatusBarHeight() { Class<?> c = null; Object obj = null; Field field = null; int x = 0, statusBarHeight = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field.get(obj).toString()); statusBarHeight = getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return statusBarHeight; }
-
//设置自己需要的颜色 public void setTheme(String color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { View v = new View(this); ViewGroup.LayoutParams lParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight()); if (color == null) { v.setBackgroundColor(ContextCompat.getColor(this, R.color.titlr_bg_color)); } else { v.setBackgroundColor(Color.parseColor(color)); } v.setLayoutParams(lParams); ViewGroup view = (ViewGroup) getWindow().getDecorView(); view.addView(v); Window window = getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }
-
形参中传递颜色的十六进制值即可把状态栏的颜色定制成你想要的颜色,小伙伴们可以试试。