美文网首页
自定义View系列(九)设置状态栏颜色

自定义View系列(九)设置状态栏颜色

作者: Ayres | 来源:发表于2017-07-18 15:02 被阅读0次

网上有很多第三方的改变状态栏颜色的代码,写法也不一样,今天我们自己来写一套,适配到Android4.4以上。

1.android5.0以上执行语句

5.0以上有系统的方法,比较好实现如下:

 if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
        //直接调用系统的方法
           activity.getWindow().setStatusBarColor(color);
 }
2.android4.4以上到5.0以下适配

因为android4.4以上到5.0以下系统没有提供方法,需要自己去实现,具体的实现思路--》把它设成全屏 ,在状态栏加一个布局
设置全屏

        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

添加一个布局

    //状态栏添加一个布局
        View view=new View(activity);
        ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,      getStatusBarHeight(activity));
        view.setLayoutParams(params );
        view.setBackgroundColor(color);

       ViewGroup decorView= (ViewGroup) activity.getWindow().getDecorView();
        decorView.addView(view, 0);

       ViewGroup contentView=(ViewGroup) activity.findViewById(android.R.id.content);

        View activityView = contentView.getChildAt(0);
        activityView.setFitsSystemWindows(true);
3.获取状态栏高度
private static int getStatusBarHeight(Activity activity){
   //先获取资源id,根据资源ID获取资源
  Resources resources= activity.getResources();
int identifier = resources.getIdentifier("status_bar_height", "dimen", "android");
return resources.getDimensionPixelOffset(identifier);
}

其实就那么简单,下面提供以下完整代码

public class StatusBarUtil {
/**
 *
 * @param activity
 * @param color
 */
public static void setStatusBarColor(Activity activity,int color){
    //5.0以上
    if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
        //直接调用系统的方法
           activity.getWindow().setStatusBarColor(color);

    }else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
      //4.4-5.0之间 采用一个技巧 ,首先把他能成全屏 ,在状态栏加一个布局
        //设置全屏
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

        //状态栏添加一个布局
        View view=new View(activity);
        ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,     getStatusBarHeight(activity));
        view.setLayoutParams(params );
        view.setBackgroundColor(color);

       ViewGroup decorView= (ViewGroup) activity.getWindow().getDecorView();
        decorView.addView(view, 0);

       ViewGroup contentView=(ViewGroup) activity.findViewById(android.R.id.content);

        //1.方式一
        View activityView = contentView.getChildAt(0);
        activityView.setFitsSystemWindows(true);
        //方式二
        //            contentView.setPadding(0,getStatusBarHeight(activity),0,0);
        //方式三
       //            activityView.setPadding(0,getStatusBarHeight(activity),0,0);

    }

}

/**
 * 获取状态栏高度
 * @param activity
 * @return
 */
 private static int getStatusBarHeight(Activity activity){
   //先获取资源id,根据资源ID获取资源
  Resources resources= activity.getResources();
int identifier = resources.getIdentifier("status_bar_height", "dimen", "android");

return resources.getDimensionPixelOffset(identifier);
 }
 }

相关文章

  • 自定义View系列(九)设置状态栏颜色

    网上有很多第三方的改变状态栏颜色的代码,写法也不一样,今天我们自己来写一套,适配到Android4.4以上。 1....

  • 修改iOS 状态栏颜色

    在状态栏的位置添加一个view,设置view的颜色,这个颜色就可以作为状态栏的底色UIView *barView ...

  • 沉浸式页面效果

    设置状态栏背景透明 设置状态栏字体颜色 设置DecorView全屏 针对Toolbar(系统或者自定义),留出顶部...

  • Android设置状态栏的颜色

    Android设置状态栏的颜色 准确的是说是Android 5.0以后设置状态栏的颜色 第一种方式 自定义styl...

  • iOS--关于状态栏(StatusBar)

    设置状态栏样式第一种:(需求:可在任意页面动态设置状态栏颜色)1.plist文件设置添加View controll...

  • iOS状态栏设置

    修改所有状态栏颜色 修改单个页面的状态栏颜色添加自定义View放在试图上替代状态栏。如果导航栏存在也可放在导航栏上...

  • (iOS)记录plist.info少用并容易忘记的小东西

    // 设置状态栏颜色 info.plist添加View controller-based status bar a...

  • iOS开发小知识备忘录

    1.设置导航栏透明 2.设置导航栏标题颜色 3.设置状态栏颜色 只要在plist文件里View controlle...

  • 状态栏设置

    设置状态栏颜色时,直接设置是不行的 需要在info.plist里设置View controller-based s...

  • Swift实战小结

    动态改变状态栏字体颜色 图片设置拉伸 当自定义navigationBar时 需要设置固有大小 和 navigati...

网友评论

      本文标题:自定义View系列(九)设置状态栏颜色

      本文链接:https://www.haomeiwen.com/subject/onhhkxtx.html