StatusBarUtil
StatusBarUtil copied to clipboard
顶部状态栏如果是渐变的 怎样实现呢
有这样的一个方案 作者参考下 就是动态替换 docorView的状态栏位置的view目前问题是做好和内部的setcolor做好兼容有些问题
public static void setColor(Activity activity, int color, boolean isDrawable) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 设置状态栏透明 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 生成一个状态栏大小的矩形 View statusView = createStatusView(activity, color, isDrawable); // 添加 statusView 到布局中 ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); //在一个界面在来回切换顶部状态栏的时候导致透明度的状态栏不能显示 需remove掉 if (decorView.getChildCount() >= 2) { decorView.removeViewAt(1); } decorView.addView(statusView); // 设置根布局的参数 ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); rootView.setFitsSystemWindows(true); rootView.setClipToPadding(true); } } private static View createStatusView(Activity activity, int color, boolean isDrawable) { // 获得状态栏高度 int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android"); int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);
// 绘制一个和状态栏一样高的矩形
View statusView = new View(activity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
statusBarHeight);
statusView.setLayoutParams(params);
if (isDrawable) {
statusView.setBackground(activity.getResources().getDrawable(R.drawable.shape_user_head));
} else {
statusView.setBackgroundColor(activity.getResources().getColor(color));
}
return statusView;
}
渐变的话相当于给那个占据状态栏的 view 设置一个渐变的背景色,讲道理应该也是可以实现的,就是不知道兼容性如何
可以设置渐变背景
修改addTranslucentView方法中fakeTranslucentView.setBackgroundResource(R.drawable.side_nav_bar);
side_nav_bar.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="135" android:centerColor="#00fff2" android:endColor="#ff0206" android:startColor="#f70e01" android:type="linear"/> </shape>
可以简单看下代码 在绘制那个假的 StatubarView 的时候,背景设置成渐变的。 不过这个就不能直接用这个库了,需要你自己去修改实现。
fakeTranslucentView.setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0)); 后面的颜色不能自定义吗?
这个需要自己改动库去实现了
各位,为什么在安卓8.0上显示的颜色会比较深一些?
在Android 8.0版本显示有问题,应该从哪里入手去改?