Android

안드로이드 앱의 스테이터스바 및 내비게이션바 색 변경

calvin.kim 2019. 5. 12. 10:48

이전 안드로이드폰은 되돌아가가기, 홈, 앱리스트 버튼이 모두 물리 키로 존재했다. 그래서 화면 안에 내용을 그리는 앱에서 이 영역에 대해 신경쓸 일이 없았다. 하지만 최근 안드로이드폰은 물리키들이 사라지고 하단에 네비게이션바가 나타나는 것이 일반적이다. 이렇다보니 네비게이션바의 색깔과 앱의 색깔이 달라서 보기가 좋지 않은 경우가 생기고는 한다. 안드로이드 앱에서 스테이터스바와 타이틀바까지 같은 색을 맞추는 방법을 알아보자. 이번에 소개하는 방법은 안드로이드 L버전 이후에만 적용이 가능한 방법이다.

 

1. xml을 이용하는 방법

 

 

그림에서 보듯이 앱에서 색의 이름이 지정되어 있다. 바꾸기 원하는 색상을 안드로이드 프로젝트 내의 res/values/colors.xml에 저장해주면 간단히 앱에서 원하는 색상을 지정할 수 있다.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
</resources>

 

 2. 코드 내에서 변경하는 방법

 

안드로이드앱의 배경이 일정한 색일 경우 colors.xml 파일에 색을 지정하는 것만으로 충분하지만, 앱에 따라서 구동 중에 앱의 배경색이 바뀌거나 하는 경우에는 코드로 색을 변경할 필요가 있다. 코드로 변경을 하기 위해서는 Activity.getWindow()로 액티비티의 윈도우 창을 가져온 후, android.view.Window의 멤버함수를 이용해 색상 변경을 해야 한다. 다음은 스테이터스바와 네비게이션바를 붉은색으로 바꾸는 예제이다.

 

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            applyColors();
        }
    }

    // Apply the title/navigation bar color
    private void applyColors() {
        getWindow().setStatusBarColor(Color.parseColor("#FF0000"));
        getWindow().setNavigationBarColor(Color.parseColor("#FF0000"));
    }

 

스테이터스바와 네비게이션바의 배경 색상을 아예 투명으로 바꾸어 앱의 배경색이 그대로 적용되게 하려면 다음과 같이 할 수 있다.

 

    // Apply the title/navigation bar color
    private void applyColors() {
        getWindow().setStatusBarColor(Color.TRANSPARENT);
        getWindow().setNavigationBarColor(Color.TRANSPARENT);
    }

 

 

Fin.

반응형