[안드로이드] status bar 색상 변경하기


안드로이드 status bar는 최상단에 위치한 기기의 상태를 표시해주는 Bar 입니다.

API 21 버전 - 롤리팝 버전 이상부터 Status bar (상태바) 색상 변경이 가능하고

API 23 버전 - 마시멜로우 부터는 상태바에 있는 아이콘 색상이 변경 가능합니다.

먼저 상태바 색상 변경 해보겠습니다.


상태바 색상 변경

방법 1. 자바 코드에서 적용하기

빌드 버전을 확인하고 v21 이상이면 상태바의 색상을 검정색으로 바꿨습니다.

if (Build.VERSION.SDK_INT >= 21) {
  // 21 버전 이상일 때
  getWindow().setStatusBarColor(Color.BLACK);
}


방법 2 value/style 에서 적용하기

styles.xml-v21 파일에서 AppTheme 스타일에

아래와 같이 statusBarColor 를 추가해줍니다. 색상을 본인이 원하는 걸로 해주시면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:statusBarColor">#000</item>
    </style>
</resources>

결과



상태바 아이콘 색상 변경

public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View view = getWindow().getDecorView();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (view != null) {
                // 23 버전 이상일 때 상태바 하얀 색상에 회색 아이콘 색상을 설정
                view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                getWindow().setStatusBarColor(Color.parseColor("#f2f2f2"));
            }
        }else if (Build.VERSION.SDK_INT >= 21) {
            // 21 버전 이상일 때
            getWindow().setStatusBarColor(Color.BLACK);
        }
    }
}

BaseActivity 라는 클래스를 만들어 AppCompatActivity 를 상속받습니다.

이후 버전을 확인하고 API 23 이상이면 상태바를 하얀 배경에 회색 아이콘으로

21 이상이면 검정 배경으로 변경하는 코드를 작성해줬습니다.

이후 적용할 Activity에 AppCompatActivity를 BaseActivity로 변경해주시면 됩니다.

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

AppCompatActivity > BaseActivity

public class MainActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener {

BaseActivity의 이름은 편하신대로 정하시면 됩니다.


결과

API 25 버전으로 빌드했더니 하얀 배경에 회색 아이콘을 가진 상태바가 나왔네요.