StatusBarUtil icon indicating copy to clipboard operation
StatusBarUtil copied to clipboard

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

Open zxp0505 opened this issue 7 years ago • 7 comments

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

zxp0505 avatar Aug 24 '17 03:08 zxp0505

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

laobie avatar Aug 27 '17 07:08 laobie

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

teaim avatar Nov 15 '17 08:11 teaim

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

laobie avatar Nov 17 '17 07:11 laobie

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

wzgl5533 avatar Mar 19 '18 10:03 wzgl5533

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

laobie avatar Mar 19 '18 11:03 laobie

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

galaxy-ruofan avatar Jul 03 '18 15:07 galaxy-ruofan

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

galaxy-ruofan avatar Jul 04 '18 03:07 galaxy-ruofan