laobie / StatusBarUtil

A util for setting status bar style on Android App.
http://t.cn/Rq746Kb
Apache License 2.0
8.81k stars 1.72k forks source link

顶部状态栏如果是渐变的 怎样实现呢 #144

Open zxp0505 opened 7 years ago

zxp0505 commented 7 years ago

有这样的一个方案 作者参考下 就是动态替换 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;
}
laobie commented 7 years ago

渐变的话相当于给那个占据状态栏的 view 设置一个渐变的背景色,讲道理应该也是可以实现的,就是不知道兼容性如何

teaim commented 7 years ago

可以设置渐变背景 修改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>

laobie commented 7 years ago

可以简单看下代码 在绘制那个假的 StatubarView 的时候,背景设置成渐变的。 不过这个就不能直接用这个库了,需要你自己去修改实现。

wzgl5533 commented 6 years ago

fakeTranslucentView.setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0)); 后面的颜色不能自定义吗?

laobie commented 6 years ago

这个需要自己改动库去实现了

galaxy-ruofan commented 6 years ago

各位,为什么在安卓8.0上显示的颜色会比较深一些?

galaxy-ruofan commented 6 years ago

在Android 8.0版本显示有问题,应该从哪里入手去改?