自定義View系列(九)設(shè)置狀態(tài)欄顏色

網(wǎng)上有很多第三方的改變狀態(tài)欄顏色的代碼,寫法也不一樣,今天我們自己來寫一套,適配到Android4.4以上。

1.android5.0以上執(zhí)行語句

5.0以上有系統(tǒng)的方法,比較好實現(xiàn)如下:

 if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
        //直接調(diào)用系統(tǒng)的方法
           activity.getWindow().setStatusBarColor(color);
 }
2.android4.4以上到5.0以下適配

因為android4.4以上到5.0以下系統(tǒng)沒有提供方法,需要自己去實現(xiàn),具體的實現(xiàn)思路--》把它設(shè)成全屏 ,在狀態(tài)欄加一個布局
設(shè)置全屏

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

添加一個布局

    //狀態(tài)欄添加一個布局
        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.獲取狀態(tài)欄高度
private static int getStatusBarHeight(Activity activity){
   //先獲取資源id,根據(jù)資源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){
        //直接調(diào)用系統(tǒng)的方法
           activity.getWindow().setStatusBarColor(color);

    }else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
      //4.4-5.0之間 采用一個技巧 ,首先把他能成全屏 ,在狀態(tài)欄加一個布局
        //設(shè)置全屏
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

        //狀態(tài)欄添加一個布局
        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);

    }

}

/**
 * 獲取狀態(tài)欄高度
 * @param activity
 * @return
 */
 private static int getStatusBarHeight(Activity activity){
   //先獲取資源id,根據(jù)資源ID獲取資源
  Resources resources= activity.getResources();
int identifier = resources.getIdentifier("status_bar_height", "dimen", "android");

return resources.getDimensionPixelOffset(identifier);
 }
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容